![]() |
Stringkonvertierung
Guten Tag Delphianer,
ich habe folgendes Problem bei der Konvertierung von Strings: in einer Datei (DATANORM) steht folgende Zeile: Dyckerhoff Zement CEM II 32,5 R, 25 kg;(Achtung Farb„nderung) wenn ich die Datei mit dem TotelCommander öffne (Lister) steht folgendes: Dyckerhoff Zement CEM II 32,5 R, 25 kg;(Achtung Farbänderung) also die korrekte Umsetzung. Der TotalCommander benutzt die ASCII-Codierung (ANSI/DOS (lokale Codeseite (1), wie feststellen konnte. Stelle ich die Codierung im TotalCommander zu Testzwecken um, werden für die Umlaute wieder andere Zeichen dargestellt. Aber wie kann ich die korrekte Darstellung, Umwandlung erreichen? Mit welchem Befehl, Funktion kann die Umwandlung gelingen? Die Umwandlung mit UTF8..., OEMTo... habe ich alles versucht. War aber nicht mit Erfolg gekrönt. Vielen Dank für Eure Mühen. Gruß HPB |
AW: Stringkonvertierung
Wie lädst du die Datei in Delphi?
|
AW: Stringkonvertierung
Delphi-Quellcode:
Sah gut aus.
const
Test = 'Achtung Farb„nderung'; var s: string; begin SetLength(s, Length(Test)); OEMToCharBuff(PAnsiChar(Test), PChar(s), Length(Test)); ShowMessage(s); end; |
AW: Stringkonvertierung
Zitat:
Delphi-Quellcode:
und dann mit while not Eof(fDatei) jede Zeile lesen
AssignFile(fDatei, aDatei);
{$I-}Reset(fDatei); {$I+ } |
AW: Stringkonvertierung
Für den einfachsten Fall sollte das genügen:
Delphi-Quellcode:
Wer arbeitet eigentlich noch mit Readln?
function AnsiToOem(const AValue: AnsiString): AnsiString;
begin Result := AValue; if Length(Result) <> 0 then CharToOem(PAnsiChar(Result), PAnsiChar(Result)); end; function OemToAnsi(const AValue: AnsiString): AnsiString; begin Result := AValue; if Length(Result) <> 0 then OemToChar(PAnsiChar(Result), PAnsiChar(Result)); end; var sl: TStringList; begin sl.LoadFromFile('Oem.txt'); sl.Text := OemToAnsi(sl.Text); {...} |
AW: Stringkonvertierung
Zitat:
|
AW: Stringkonvertierung
Komisch, bei mir schon.
[edit] @Blup: Lies mal die Bemerkungen zu OEMToChar/CharToOEM, Dein Code wird unter Delphi > 2007 knallen. Außerdem rät Microsoft selbst von der Verwendung ab.[/edit] [edit2] Sry, ich hab übersehen, dass Du alles als AnsiStrings deklariert hast. Damit bleibt nur noch Punkt 2. [/edit2] |
AW: Stringkonvertierung
Zitat:
Bin gerade dabei ein uralt Programm umzuschreiben. Es wird nicht gleich alles neu gemacht. Erst einmal die korrekten Daten bekommen, dann alles weitere. Gruß HPB |
AW: Stringkonvertierung
Vllt. was zur Codierung, könnte helfen:
Zitat:
![]() |
AW: Stringkonvertierung
Dann stimmt vermutlich die im Windows eingestellte OEM-Code-Page nicht.
Stell mal in den Ländereinstellungen auf Englisch(USA) und speichern. Danach wieder auf Deutschland(Deutsch), speichern und Windows neu starten. Zitat:
Zitat:
Das sollte auch nach Delphi 2007 keine Probleme verursachen. In neueren Delphi-Versionen könnte man auch das mal versuchen, kann ich aber grad nicht testen:
Delphi-Quellcode:
function ConvertCodePage(const S: _RawByteStr; AFromCodePage, AToCodepage: Word): _RawByteStr;
begin Result := S; SetCodePage(Result, AFromCodePage, False); // Codepage der Ausgangsdaten nur festlegen SetCodePage(Result, AToCodepage, True); // Codepage umstellen und Daten konvertieren end; sl.Text := ConvertCodePage(sl.Text, 437, 850); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz