Lade...
 

CX_ASCII_FILE::UTF8Code

CX_ASCII_FILE::UTF8Code

Beschreibung:

Der Aufruf dieser Funktion legt fest, dass beim Einlesen (Read bzw. ReadIntoBuffer) und Schreiben (Write bzw. WriteFromBuffer) der Datei der Unicode-Zeichensatz UTF-8 benutzt wird.

Für den UTF-8 Zeichensatz ist analog zu UTF-16 eine Byte-Order-Mark(BOM) definiert. Diese dient bei UTF-8 nicht ihrem eigentlichen Zweck, da die Byte-Reihenfolge bei UTF-8 nicht falsch interpretiert werden kann. Einige Anwendungen setzen/erwarten diese BOM in den Dateien, um den Zeichensatz der Datei zu bestimmen. Dies ist für UTF-8 unüblich und nicht jede Anwendung unterstützt dies, was zu der kryptischen Zeichenkette "" am Anfang der Datei führt.
Um beide Typen von Schnittstellen zu unterstützen, erwartet CX_ASCII_FILE beim Einlesen nie eine BOM. Sollte eine BOM am Anfang der Datei stehen, dann wird sie einfach überlesen. Beim Schreiben entscheidet der gesetzte Zeichensatz darüber, ob eine BOM in die Datei geschrieben wird, oder nicht.
Das Verhalten ist in der nachfolgenden Tabelle kurz zusammengefasst.

Zeichensatz Lesen Schreiben
UTF8Code BOM nicht notwendig, wenn vorhanden, dann wird sie überlesen BOM wird nicht geschrieben
UTF8BOMCode BOM nicht notwendig, wenn vorhanden, dann wird sie überlesen BOM wird geschrieben

Da UTF-8 ein Zeichensatz mit variabler Zeichenlänge ist, ist die Verwendung CX_ASCII_FILE im Fix-Mode(SetRecordFormat) nicht erlaubt, während UTF-8 als Zeichensatz gesetzt ist. Die Aufrufe Write und Read brechen in diesem Fall mit einer Fehlermeldung ab.

Das Umschalten zwischen Zeichensätzen ist auch zwischen zwei Lesevorgängen erlaubt.

Code-Beispiel:
//Dieses Beispiel konvertiert eine Datei von der Codepage Windows1252 nach UTF-8 mit BOM
Var(sourceFile, targetFile)
CreateTransObject(CX_ASCII_FILE) -> sourceFile
CreateTransObject(CX_ASCII_FILE) -> targetFile
"CX_ROOTDIR\\ansifile.txt" sourceFile Put(fileName)
"CX_ROOTDIR\\utf8file.txt" targetFile Put(fileName)
sourceFile Call(ANSICode)
targetFile Call(UTF8BOMCode)
"\r\n" targetFile Call(SetRecordSeparator)

do
  sourceFile Call(Read) targetFile Call(Write)
  sourceFile Call(Eof) !
while

sourceFile Call(Close)
targetFile Call(Close)

 

Stack
Stack Position Objekttyp Kurzbeschreibung
Stack(IN) Top  CX_ASCII_FILE  Datei
Stack(OUT) Top  - -
Funktionsaufruf: Call(UTF8Code)