![]() |
Wie kann ich eine UTF16-Codierte Textdatei als 8-Bit Ansistring einlesen?
Wie kann ich mit Delphi 2007 Pro einen UTF16 kodierten String in einen normalen String umwandeln?
Im speziellen Fall versuche ich, mit AssignFile/Reset/ReadLn eine per UTF16 kodierte Datei zu lesen. Es muss aber irgendeine Umwandlung geben, da ich ständig '#0' nach jedem Zeichen erhalte. Wenn ich die Datei mit ReadLn auslese und anstatt einem String einen WideString verwende, macht das keinen Unterschied. Was kann man machen? Delphi 2007 ist ja noch nicht Unicode-fähig. Ich muss aber trotzdem einen Weg finden. |
AW: Umwandlung eines UTF16 kodierten Strings in normalen String
Du musst mit TFileStream arbeiten.
Beispiel wie sowas geht liefert die Jedi (JclUnicode), TNTWare (TTNTWideStringList) oder Elpack (TLMDWideStringList); Hier im Forum müssten auch schon einige Codefragmente vorliegen (Codelib?) Und deine Frage sollte eher lauten: Wie kann ich einen UTF16-Codierte Textdatei so einlesen das ich damit einen 8-Bit AnsiString füllen kann :wink: |
AW: Umwandlung eines UTF16 kodierten Strings in normalen String
Quick'n'dirty:
Delphi-Quellcode:
und dann noch einen Ansi-String als WideString interpretieren:
function Utf16ToAnsi(const Input: WideString): AnsiString;
begin // Nur bis < Delphi 2009 - ab da ist UTF8Encode obsolute, gibt dafür aber ne neue Funktion result := Utf8ToAnsi(UTF8Encode(Input)); end;
Delphi-Quellcode:
// Einfach aus den Fingern gesogen - ohne Test
function AnsiAsUtf16(const Input: AnsiString): WideString; function internDupe(const s: WideString): WideString; begin result := s; end; var p1: Pointer; begin p1 := @Input; result := internDupe(PWideString(p1)^); end; |
AW: Umwandlung eines UTF16 kodierten Strings in normalen String
PS: AssignFile und Co. ist auch ab D2009 immernoch nur ANSI ... nix mit Unicode.
|
AW: Umwandlung eines UTF16 kodierten Strings in normalen String
Also die Utf16ToAnsi Funktion liefert bei mir den gleichen Text wie den Eingabetext zurück.
Das ist der Eingabetext, versuche doch mal ihn manuell zu übergeben: <'#0'?'#0'x'#0'm'#0'l'#0' '#0'v'#0'e'#0'r'#0's'#0'i'#0'o'#0'n'#0'='#0'"'#0'1 '#0'.'#0'0'#0'"'#0' '#0'e'#0'n'#0'c'#0'o'#0'd'#0'i'#0'n'#0'g'#0'='#0'" '#0'U'#0'T'#0'F'#0'-'#0'1'#0'6'#0'"'#0'?'#0'> |
AW: Wie kann ich eine UTF16-Codierte Textdatei als 8-Bit Ansistring einlesen?
Zitat:
Delphi-Quellcode:
function IchWillNenNormalenString_InhaltIstAberUTF16(input: AnsiString): AnsiString;
begin result := Utf16ToAnsi(AnsiAsUtf16(input)); end; |
AW: Wie kann ich eine UTF16-Codierte Textdatei als 8-Bit Ansistring einlesen?
Bei XML ist halt nicht unbedingt ein BOM nötig/vorgeschrieben.
Die Streamingfunktionen seit Delphi 2009 können nun automatisch, anhand des BOM die Kodierung erkennen, wenn sie via BOM markert ist. Und nun die Frage aller Fragen: Warum wollen in letzter Zeit eigentlich ständig alle XML direkt als TEXT einlesen, anstatt einen ordentlichen XML-Parser zu nutzen, welcher sich um solche Kleinigkeiten kümmert? |
AW: Wie kann ich eine UTF16-Codierte Textdatei als 8-Bit Ansistring einlesen?
Zitat:
|
AW: Wie kann ich eine UTF16-Codierte Textdatei als 8-Bit Ansistring einlesen?
Diese Leute sollten sich mal fragen, warum auch eine menge Zeit (teils Jahre) in die Entwicklung eines entsprechenden Parser einfliesen.
Und das von Leuten, welche schon ein bissl mehr Ahnung davon haben. Aber naja, erfinde man einfach das Rad jedesmal neu. :roll: |
AW: Wie kann ich eine UTF16-Codierte Textdatei als 8-Bit Ansistring einlesen?
Zitat:
Ich habe den Aufwand auch schon betrieben, und zwar mit dem XML-Parser von ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:05 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-2025 by Thomas Breitkreuz