Zum Vergleich (getestet mit ANSI und UTF-8), nach "mein Text" folgt ...
File.WRITE('mein Text') | ein CRLF (13 + 10) |
OutStream.WRITETEXT('mein Text") | nichts - übrigens unabhängig davon, ob die Datei mit oder Textmode geöffnet ist. |
OutStream.WRITE("mein Text") | ein NULL (hexadezimal 00) an. Wieder unabhängig vom Textmode. |
OutStream.WRITE muss sich zwischendurch (spätestens aber nach NAV 2009) geändert haben. Die Onlinehilfe schweigt zu dieser Änderung (der Ergänzung von 00).
Dieser Tatsache ist zu verdanken, dass eine Datei, die als UTF-8 erstellt worden ist und per OutStream.WRITE Buchstabe für Buchstabe (!) befüllt wird, dennoch - trotz enthaltener Umlaute - im ANSI-Format endet.
Ist das jetzt ein Bug oder ein Feature?
Wer es selbst testen möchte, hier die Erzeugung von sehr simplen UTF8-Dateien (ohne meine Buchstabe-für-Buchstabe-Befüllung):
- Code: Alles auswählen
NewEncoding := TEXTENCODING::UTF8;
FolderName := 'UTF8';
// File.WRITE schließt immer mit einem CRLF ab
TestFile.TEXTMODEÂ :=Â TRUE;
TestFile.CREATE('C:\Temp\' + FolderName + '\OhneTextmode_2Umlaute.txt',NewEncoding);
TestFile.WRITE('äöüß'); // + CRLF
TestFile.CLOSE;
// OutStream.WRITE fügt nach jedem WRITE an NULL (00) an. Textmode egal!
TestFile.TEXTMODEÂ :=Â TRUE;
TestFile.CREATE('C:\Temp\' + FolderName + '\OhneTextmode_2Umlaute_Streaming_TextmodeTRUE_WRITE.txt',NewEncoding);
TestFile.CREATEOUTSTREAM(NAVOutStream);
NAVOutStream.WRITE('äöüß'); // + NULL
TestFile.CLOSE;
TestFile.TEXTMODEÂ :=Â FALSE;
TestFile.CREATE('C:\Temp\' + FolderName + '\OhneTextmode_2Umlaute_Streaming_TextmodeFALSE_WRITE.txt',NewEncoding);
TestFile.CREATEOUTSTREAM(NAVOutStream);
NAVOutStream.WRITE('äöüß'); // + NULL
TestFile.CLOSE;
// OutStream.WRITETEXT fügt nichts mehr an - so wie es sein soll. Textmode egal!
TestFile.TEXTMODEÂ :=Â TRUE;
TestFile.CREATE('C:\Temp\' + FolderName + '\OhneTextmode_2Umlaute_Streaming_TextmodeTRUE_WRITETEXT.txt',NewEncoding);
TestFile.CREATEOUTSTREAM(NAVOutStream);
NAVOutStream.WRITETEXT('äöüß'); // + gar nichts
TestFile.CLOSE;
TestFile.TEXTMODEÂ :=Â FALSE;
TestFile.CREATE('C:\Temp\' + FolderName + '\OhneTextmode_2Umlaute_Streaming_TextmodeFALSE_WRITETEXT.txt',NewEncoding);
TestFile.CREATEOUTSTREAM(NAVOutStream);
NAVOutStream.WRITETEXT('äöüß'); // + gar nichts
TestFile.CLOSE;