Encoding Problem

Hallo zusammen,

ich habe mich noch nie mit Text Encoding (UTF-8, UTF… usw.) auseinander gesetzt. Nun versuche ich über einen TextInputStream zeilenweise eine Textdatei einzulesen.

Soweit ich das beurteilen kann, ist die Textdatei UTF-8 kodiert.
Kopiere ich dann eine Zeichenkette (die mit readline eingelesen wurde) wie z.B.

L\xC3\xB6schen

in ein Textfeld, wird die Zeichenkette dort auch als L\xC3\xB6schen angezeigt und nicht als Löschen.

Wo liegt mein Fehler? Habe schon viel mit Encodings herumgespielt, das Ergebnis ist immer das selbe…

Jürgen

Da wären ein paar mehr Angaben ganz hilfreich, z.B. einmal die Textdatei (um zu schauen, welche Kodierung die tatsächlich hat) und natürlich der Code, der zum Einlesen verwendet wird…

Wenn Sie die Zeile mit der Lesezeile lesen, geben Sie die Kodierung an?

  • Übersetzt von Apple

Greg meint wohl die ReadLine Funktion und ob da ein Parameter dran ist.

1 Like

Ich gebe bei dem InputStream das Encoding an. Anbei mal ein schnell konstruiertes Beispiel, ist alles im Opening Event drin, einfach die beigefügte test.txt auswählen…

Demo.zip

Wahrscheinlich ist es so banal, dass ich jetzt schon rot anlaufe :zipper_mouth_face:

Hier noch zusätzlich der Code:

Var f As FolderItem
Var textInput As TextInputStream
Var rowFromFile As String
Var a As String

f = FolderItem.ShowOpenFileDialog("text/plain") // defined as a FileType
If f <> Nil Then
  textInput = TextInputStream.Open(f)
  textInput.Encoding = Encodings.UTF8
  
  While Not textInput.EndOfFile
    a = textInput.ReadLine
    TextArea1.AddText(a + EndOfLine)
    
  Wend
End If

In der Textdatei steht der Text so drin:

Diesen Text m\xC3\xB6chte ich l\xC3\xB6schen
Und diesen Text m\xC3\xB6chte ich auch l\xC3\xB6schen

Die TextInputStream Klasse macht also alles richtig!

Die Sonderzeichen sind aus irgendeinem Grund zusätzlich kodiert mit \x prefix und das kann man in Xojo natürlich entfernen mit ein bisschen Code.

Ich glaube dass ich das falsch interpretiert habe. Wäre die Textdatei wirklich UTF-8, müsste das Wort Löschen doch so aussehen

\x4C\xC3\xB6\x73\x63\x68\x65\x6E

oder irre ich mich da?

Da aber in der Textdatei nur die Umlaute kodiert sind, sieht das eher wie bei HTML aus…also kein UTF Encoding sondern was anderes…

Da hab ich mir beim Einsteigen in die Encodings gleich Mal wieder das beste Beispiel an Text rausgesucht …

Nein, wenn da utf-8 drin wäre, dann stände da Löschen mit ö und dein Textprogramm würde sich um das encoding vom ö mit zwei oder drei Bytes kümmern.

Hier hast du eine UTF-8 Datei mit zusätzlichem Encoding.

Praktisch das ö als Utf-8 Code hexcodiert…

Wo habe ich das schon gesehen?

Ah ja, speichert man das Projekt in Xojo als Text für Versions kontrolle ab, wird dort die gleiche Kodierung bei Umlauten verwendet.

Und in C:
So the sequence in your example of '\xeb\x2a' is an implementation defined value. It’s likely to be the int value 0xeb2a or 0x2aeb depending on whether the target platform is big-endian or little-endian, but you’d have to look at your compiler’s documentation to know for certain.

Da dies doch kein echtes Ecoding Problem war markiere ich das Thema mal als erledigt!
Danke an alle!