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