Hallo zusammen,
ich stehe bei folgendem Problem auf dem Schlauch. In einer Textdatei steht folgender Inhalt:
Code:
Das ist mein Test!
Für die Tür einen Öffner!
Die Datei ist als UTF-8 mit BOM erstellt worden. Wenn ich mittels ReadCharacter aus dieser Datei zeichenweise den Inhalt einlese und an einen String übergebe, dann erhalte ich folgende Ausgabe:
Code:
??Das ist mein Test!
Fü?r die Tü?r einen Ö?ffner
Wenn ich den Inhalt zeilenweise mit ReadString einlese, dann ist das Ergebnis korrekt.
Hat jemand eine Erklärung dafür? Wie kann ich den Inhalt korrekt zeichenweise Einlesen und an einen String übergeben?
Hier mein Test-Code
Code:
EnableExplicit
Enumeration
#Filehandler
EndEnumeration
Define sFilename.s, sContent.s, sUnicode.s, sFileString.s
Define iFilepos.i, iCharForm.i, iBOM.i
Define cFileChar.c
;iCharForm = #PB_Ascii
iCharForm = #PB_UTF8
;iCharForm = #PB_Unicode
sFilename = OpenFileRequester("Datei öffnen", "Test.txt", "Text-Datei (*txt) | *.txt", 0)
; lesen einzelner Zeichen
If ReadFile(#Filehandler, sFilename, iCharForm)
; Prüfen BOM (Byte Order Mark)
iBOM = ReadStringFormat(#Filehandler)
Select iBOM
Case #PB_Ascii
MessageRequester("Format", "Ascii")
Case #PB_UTF8
MessageRequester("Format", "UTF8")
Case #PB_Unicode
MessageRequester("Format", "Unicode")
Default
MessageRequester("Format", "Was anderes")
EndSelect
While Eof(#Filehandler) = 0
FileSeek(#Filehandler, iFilepos)
cFileChar = ReadCharacter(#Filehandler, iCharForm)
sContent + Chr(cFileChar)
iFilepos + 1
Wend
MessageRequester("Content zeichenweise", sContent)
; lesen von Zeilen
FileSeek(#Filehandler, 0) ; beginne am Anfang
While Eof(#Filehandler) = 0
sFileString + ReadString(#Filehandler, iCharForm) + Chr(13)
Wend
MessageRequester("Content zeilenweise", sFileString)
CloseFile(#Filehandler)
Else
MessageRequester("Fehler", "Beim lesen der Datei ist ein Fehler aufgetreten.")
EndIf
Gruß
Istvan