Seite 1 von 1
Textdatei Kodierung Umlaute
Verfasst: 16.06.2013 17:12
von Micha122
Hallo,
nachdem ich eigentlich recht zufrieden mit meinem Programm bin, wollte ich mich heute mal einem wie ich dachte kleinen Problem widmen, welches ich schon länger vernachlässige.
Mein Programm liest Datanorm4 Dateien ein und speichert diese in eine PostgreSQL Datenbank.
Zum testen gibt es dort jede menge Datanorm- Dateien zum Download:
http://www.haustechnikdialog.de/bibliot ... aetze.aspx
Das Problem:
Weder Editor, WordPad oder der PB- Debugger zeigen die Umlaute richtig an.
Hier ein kleiner Testcode:
Code: Alles auswählen
file.s = OpenFileRequester("Datanorm 4 Datei auswählen", "", "*.txt", 0)
ReadFile(0, file)
string.s = ReadString(0, #PB_Unicode)
Debug string
Unterschiedliche Kodierungen mit ReadString habe ich natürlich auch schon getestet, jedoch ohne Erfolg.
Gruß, Micha122
Re: Textdatei Kodierung Umlaute
Verfasst: 16.06.2013 17:16
von WPö
Moin!
Ich kenne das Format nicht. Schicke uns doch bitte einen Dateiauszug als Hex, worin Umlaute enthalten sind. Alternativ kannst Du es auch mit Notepad++ versuchen.
Gruß - WPö
Re: Textdatei Kodierung Umlaute
Verfasst: 16.06.2013 17:28
von Micha122
Hallo WPö!
Hier ein kleiner Auszug als Hex:
Code: Alles auswählen
5620313230313131506C756767697420476D62482C204D816E6368656E20202020202020202020202020202020202020726566726573682D4672697363686C7
5667473797374656D2030312F323031312020202020202020507265697365206D6974203020626974746520616E66726167656E2020202020202020303445555
20D0A543B4E3B5445564647333B3B313B3B504C55474749542045727361747A66696C74657220473320776569E13B323B3B66817220496E7374616C6C6174696
F6E732D536574732045563130302F45563230302F45563530303B0D0A543B4E3B
Wenn Du den Code im Hexeditor einfügst wirst Du sehen, das z.B. im Wort "München" das "ü" nicht dargestellt wird.
__________________________________________________
Hex-Code in mehreren Zeilen geteilt & Code-Tags hinzugefügt
16.06.2013
RSBasic
Re: Textdatei Kodierung Umlaute
Verfasst: 16.06.2013 17:33
von matbal
Ich habe mir eine Datei im Lister vom TotalCommander angesehen. Er verwendet den OEM-Zeichensatz. Das könnte man mit mit OemToChar_() konvertieren....
Code: Alles auswählen
Define File$ = "d:\DATANORM.txt"
Define Zeile$
If ReadFile(0, File$)
While Not Eof(0)
Zeile$ = ReadString(0, #PB_Ascii)
OemToChar_(@Zeile$, @Zeile$)
Debug Zeile$
Wend
CloseFile(0)
EndIf
Re: Textdatei Kodierung Umlaute
Verfasst: 16.06.2013 17:37
von WPö
Schau mal bei
http://de.wikipedia.org/wiki/Codepage_850. Dort siehst Du, daß die Codes $81 und $e1 auf ü und ß gesetzt sind und sich mit Deinen Daten decken. Damit kommst Du bestimmt weiter.
Gruß - WPö
Re: Textdatei Kodierung Umlaute
Verfasst: 16.06.2013 18:02
von Micha122
Danke WPö!
Wenn ich das jetzt richtig verstanden habe, muss ich also bereits beim Einlesen der Datei auf entsprechende Hex- Werte achten und bei Fund durch die richtigen Umlaute ersetzen?
@matbal
Danke für das Beispiel, sieht aber nach WinAPI aus. Oder?
Habe aber auch vergessen zu sagen, das mein Programm auf Win und Linux läuft.
Gruß, Micha122
PS: Danke RSBasic für das ändern, werde demnächst drauf achten.

Re: Textdatei Kodierung Umlaute
Verfasst: 16.06.2013 18:11
von WPö
Darauf ein eindeutiges Jein! Es kommt darauf an, was Du machen willst. Wenn es Dir nicht darauf ankommt, daß Dein Programm Daten auf ISO-8859-15 oder UTF-8 gewandelt ausgibt, kannst Du einfach sagen, daß die Kodierung Codepage-850 lautet. Dann hat das nachfolgende Programm (z.B. ein Navigator) den schwarzen Peter.
Genauso sieht es aus, wenn Du Datenbankdaten umkopierst. Da kannst Du ja ebenfalls als Kollation "cp_850_general_ci" angeben.
Willst Du wirklich umwandeln und findest keine Funktion, die Dir das erledigt, würde ich einfach eine Tabelle anlegen. Die kann dann als Zielkodierung von mir aus sogar "latin-7-bin" lauten. Da bist Du flexibel.
Gruß - WPö
Re: Textdatei Kodierung Umlaute
Verfasst: 16.06.2013 18:34
von Micha122
Willst Du wirklich umwandeln und findest keine Funktion, die Dir das erledigt, würde ich einfach eine Tabelle anlegen. Die kann dann als Zielkodierung von mir aus sogar "latin-7-bin" lauten. Da bist Du flexibel.
Hallo WPö,
bin bereits fleißig dabei! Werde die Daten richtig umwandeln, dann habe ich bei späteren Export- Modulen weniger Arbeit.
Aus dieser Sache habe ich folgendes gelernt:
Niemals Probleme als geringfügig einschätzen, sondern besser direkt beheben.
Gruß