Textkonvertierung ANSI zu UTF8

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

Textkonvertierung ANSI zu UTF8

Beitragvon Niesi » 11. Okt 2017, 11:14 Textkonvertierung ANSI zu UTF8

Hallo,

weiß irgendwer, wo ich Dokumentation, Beispiele oder ähnliches zu "ConvertEncodingToUtf8" finden kann?

Weder hier im Lazarusforum noch mit der Suchmaschine meiner Wahl kann ich da etwas ausführliches entdecken.

Im Moment bekomme ich die auszuwertenden Textdateien sauber in UTF8 konvertiert, aber es können in Zukunft auch andere Textformen dazu kommen - und ganz und gar verstanden habe ich "ConvertEncodingToUtf8" auch noch nicht, was mich ein wenig unsicher macht ...

Vielen Dank und beste Grüße
Niesi
Niesi
 
Beiträge: 9
Registriert: 26. Jun 2016, 18:44

Beitragvon wp_xyz » 11. Okt 2017, 12:01 Re: Textkonvertierung ANSI zu UTF8

wp_xyz
 
Beiträge: 2250
Registriert: 8. Apr 2011, 08:01

Beitragvon theo » 11. Okt 2017, 15:04 Re: Textkonvertierung ANSI zu UTF8

Niesi hat geschrieben:aber es können in Zukunft auch andere Textformen dazu kommen

Was heißt "Textformen"? Entscheidend ist lediglich die Kodierung. Wenn du nur "ISO 8859-1" verwendest, wird sich nichts ändern.
Wenn du z.B. auch kyrillische Daten hast, musst du anders umwandeln etc.. Z.B. https://de.wikipedia.org/wiki/ISO_8859-5
Und nein, eine "ANSI" Datei (schwieriger Begriff) identifiziert sich nicht als eine bestimmte Kodierung.
Es ist nur mit heuristischen Verfahren softwaremäßig festzustellen, was die ursprüngliche Kodierung sein könnte.
theo
 
Beiträge: 7881
Registriert: 11. Sep 2006, 18:01

Beitragvon Niesi » 11. Okt 2017, 16:32 Re: Textkonvertierung ANSI zu UTF8

Danke an wp_xyz, den Artikel kannte ich gar nicht.

Eine direkte Doku zu "ConvertEncodingToUtf8" habe ich unter den Links leider auch nicht gefunden.

Aber gut, es funktioniert, ich werde weiter versuchen, die Quelltexte zu verstehen.

Noch mal: Danke.
Niesi
 
Beiträge: 9
Registriert: 26. Jun 2016, 18:44

Beitragvon Niesi » 11. Okt 2017, 16:37 Re: Textkonvertierung ANSI zu UTF8

theo hat geschrieben:
Niesi hat geschrieben:aber es können in Zukunft auch andere Textformen dazu kommen

Was heißt "Textformen"? Entscheidend ist lediglich die Kodierung. Wenn du nur "ISO 8859-1" verwendest, wird sich nichts ändern.
Wenn du z.B. auch kyrillische Daten hast, musst du anders umwandeln etc.. Z.B. https://de.wikipedia.org/wiki/ISO_8859-5
Und nein, eine "ANSI" Datei (schwieriger Begriff) identifiziert sich nicht als eine bestimmte Kodierung.
Es ist nur mit heuristischen Verfahren softwaremäßig festzustellen, was die ursprüngliche Kodierung sein könnte.



Naja, Notepad++ zeigt mir eine ANSI-Kodierung an. Leider weiß ich nicht, wie die Textausgaben kodiert sind und auch nicht, ob noch andere dazu kommen. Es handelt sich um die Ergebnisausgaben von Berechnungsprogrammen, die ich auswerten muss.

Das Problem ist, dass in den Texten auch Umlaute sind, die ohne "ConvertEncodingToUtf8" eben "irgendwie" (meißt als Fragezeichen) dargestellt werden. Damit lässt sich dann nicht so toll in den Dateien "navigieren", also suchen oder herauskopieren.

Und auch Dir Danke für die Antwort.
Niesi
 
Beiträge: 9
Registriert: 26. Jun 2016, 18:44

Beitragvon wp_xyz » 11. Okt 2017, 19:01 Re: Textkonvertierung ANSI zu UTF8

Niesi hat geschrieben:Eine direkte Doku zu "ConvertEncodingToUtf8" habe ich unter den Links leider auch nicht gefunden.

Also im Ernst: was brauchst du dafür eine Dokumentation? Die Funktion macht genau das, wie sie heißt: sie konvertiert einen String von einem als Parameter angegebenen Encoding nach UTF8 um. Was diese Begriffe bedeuten? Dazu verweise ich auf den Artikel im vorigen Post. Wenn du mit ANSI-Strings zu tun hast, die mit deutschen (mitteleuropäischem) Windows geschrieben worden sind, haben diese in der Regel die Code-Seite CP1252, der Aufruf wäre dann ConvertEncodingToUTF8(str, 'cp1252'); die erlaubten Encodingnamen stehen am Anfang der Unit lconvencoding.

Niesi hat geschrieben:Naja, Notepad++ zeigt mir eine ANSI-Kodierung an. Leider weiß ich nicht, wie die Textausgaben kodiert sind und auch nicht, ob noch andere dazu kommen. Es handelt sich um die Ergebnisausgaben von Berechnungsprogrammen, die ich auswerten muss.

Ich weiß nicht, wie Notepad++ das macht, aber ohne Analyse des Textes kommt man da nicht ran. Denn einem Zeichen, das für unsere CP1252 codiert ist, sieht man das genausowenig an, wie einer 1-Byte-Zahl, ob sie mit oder ohne Vorzeichen zu lesen ist. Im englischen Forum wurde vor einiger Zeit diskutiert, dass man eine bestimmte externe DLL einsetzen kann (ich weiß den Namen nicht mehr), um eine solche Analyse durchzuführen und das Encoding zu ermitteln.
wp_xyz
 
Beiträge: 2250
Registriert: 8. Apr 2011, 08:01

Beitragvon Niesi » 12. Okt 2017, 06:45 Re: Textkonvertierung ANSI zu UTF8

wp_xyz hat geschrieben:... Wenn du mit ANSI-Strings zu tun hast, die mit deutschen (mitteleuropäischem) Windows geschrieben worden sind, haben diese in der Regel die Code-Seite CP1252, der Aufruf wäre dann ConvertEncodingToUTF8(str, 'cp1252'); die erlaubten Encodingnamen stehen am Anfang der Unit lconvencoding.




Sorry, aber das ist nicht richtig. Bei mir funktioniert die Funktion mit dem Aufruf

MyMemo.Text := ConvertEncodingToUtf8(DerText.Text, GuessEncoding(DerText.Text), yesno);

Mit dem Text in einem tStringList als DerText.Text und einer boolean als yesno.
Niesi
 
Beiträge: 9
Registriert: 26. Jun 2016, 18:44

Beitragvon wp_xyz » 12. Okt 2017, 09:34 Re: Textkonvertierung ANSI zu UTF8

Richtig, den letzten Parameter hatte ich übersehen, er gibt an, ob der String durch die Routine verändert worden ist:

Code: Alles auswählen
function ConvertEncodingToUTF8(const s, FromEncoding: string; out Encoded: boolean): string
wp_xyz
 
Beiträge: 2250
Registriert: 8. Apr 2011, 08:01

Beitragvon Niesi » 12. Okt 2017, 17:32 Re: Textkonvertierung ANSI zu UTF8

Für alle, die da auch mal Texte mit Umlauten und/oder "ß" in einem tMemo verarbeiten wollen oder müssen, führe ich hier mal die Funktion auf, die ich heute entdeckte und die mir auch am besten gefällt - vielleicht spart das einmal Suchzeit:

MyMemo.Text := ConvertEncoding(DerText.Text, 'cp1252', 'utf8');

Sie konvertiert den Text sauber zu UTF8, der Aufruf ist einfach und verständlich.

Sie stammt aus der Unit "LConvEncoding".
Niesi
 
Beiträge: 9
Registriert: 26. Jun 2016, 18:44

• Themenende •

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron
porpoises-institution
accuracy-worried