Sven Rautenberg: Bits und Bytes in Unicode

Beitrag lesen

Moin!

Was mich aber richtig stutzig machte ist, das trotz UTF-8 pro Zeichen zwei Bytes verwendet werden. Sollte das nicht anders sein? Ich dachte immer, bei UTF-8 würden die ASCII-Zeichen als 8-Bit-Sequenzen gespeichert, so wie es in http://de.wikipedia.org/wiki/UTF-8 beschrieben ist. Nach jedem ASCII-Zeichen folgt ein leeres Byte (Hex: 00), welches meine Daten unnötig auf die doppelte Grösse aufbläht. Was läuft denn hier genau ab?

Dass du UTF-16 in deinem XML-Text verwendet hast, wurde schon gesagt. Die Frage bleibt: Aus welcher Quelle ist der Text in deinen Editor gelangt.

ASP arbeitet intern in allen Strings mit Unicode, wobei unerheblich ist, ob die nun als UTF-16 oder UTF-32 codiert werden. Die Ausgabe an den Browser mit Response.Write() wird durch die Codepage-Angabe beeinflusst, Codepage 65001 steht für "UTF-8".

Dateioperationen über das FileSystemObject, denen du per Parameter "unicode" befiehlst, speichern aber vollkommen unabhängig von der Codepage immer in UTF-16.

Wenn du UTF-8 speichern willst, mußt du ein FileStream-Objekt verwenden, nur dem kannst du eine Codierung mitgeben.

Speichern geht beispielsweise so:
dim filestream
set filestream=Server.CreateObject("ADODB.Stream")
filestream.CharSet = "utf-8"
filestream.Open
filestream.WriteText "Ich bin Unicode-Text UTF-8..."
filestream.SaveToFile filename,adSaveCreateOverwrite
filestream.Close
set filestream=Nothing

Wiedereinlesen geschieht analog mit LoadFromFile und ReadText.

Auch bei dieser Speicherform wird zu Beginn der Datei eine BOM geschrieben (drei Oktets).

- Sven Rautenberg