Peter Steinfeld: PHP "echte" Windows Unicode-Textdatei schreiben

Beitrag lesen

Hallo Christian,

»»»» In der Zwischenzeit habe ich mir aber noch einen HexViewer installiert und die Dateien damit mal angeschaut. Es sind die normalen Textzeichen drin jeweils gefolgt von einem NullWert.

»»Das stimmt so nicht ganz. In UTF-16 ist die Basiseinheit 2 Bytes groß; UTF-16 ist jedoch *keine* 16bit-Kodierung, da es Zeichen gibt, die in UTF-16 auch mit 4 Bytes kodiert werden. Für alle Zeichen aus ISO-8859-1 stimmt die Aussage, da die Kodierungswerte der einzelnen Zeichen in ISO-8859-1 mit den Codepositionen der einzelnen Zeichen im Unicode-Standard decken (und ISO-8859-1 nur ein Byte braucht). Allerdings verwendet Windows ja kein ISO-8859-1 sondern Windows-1252, was ISO-8859-1 ist, allerdings wird dort auch der in den ISO-Standards nicht verwendete Bereich zwischen 0x80 bis 0x9F genutzt - weswegen das Einfügen von Null-Bytes zwischen Windows-1252 *nicht* automatisch zu einem gültigen UTF-16-Text führt,

Ok, dann habe/hätte ich jetzt einfach nur Glück gehabt weil ich nur Dateipfade speichere, bei denen ich sowieso auf alle möglichen Sonderzeichen und Leerzeichen usw. verzichte.

Hälst Du es nicht für sinnvoller, den Text einfach nach UTF-16 zu konvertieren? Also $text = iconv('Windows-1252', 'UTF-16', $text);

Ja klar ist das sinnvoller :)
Wie gesagt, bis zur Erklärung von Martin wußte ich ja nicht das die Datei in UTF-16 angelegt sein muß.
Und da ich nun mal sehr ungeduldig bin, bastelte ich mir den Weg über die COM-Schnittstelle zusammen. Jetzt kann ich die paar Zeilen Code ja wieder löschen, ;-)

Danke für die Hilfe,
Peter