Problem mit Umlauten beim Einlesen mit ReadCharacter
Verfasst: 28.03.2020 14:42
Hallo zusammen,
ich stehe bei folgendem Problem auf dem Schlauch. In einer Textdatei steht folgender Inhalt:
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:
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
Gruß
Istvan
ich stehe bei folgendem Problem auf dem Schlauch. In einer Textdatei steht folgender Inhalt:
Code: Alles auswählen
Das ist mein Test!
Für die Tür einen Öffner!
Code: Alles auswählen
??Das ist mein Test!
Fü?r die Tü?r einen Ö?ffner
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: Alles auswählen
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
Istvan