#228 ---> 'ä'

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: #228 ---> 'ä'

Beitrag von mschnell »

theo hat geschrieben:Der Code von Mathias funktioniert unter Liniux nicht.

Stimmt. Linux kennt die gewünschte ANSI Code Page ja nicht. Müsste man irgendwie angeben können .... (Bei Windows verwendet das Programm vermutlich die default ANSI Code Page des OS.)

(Dem OP scheint aber auch nicht klar zu sein, dass das Ergebnis von der ANSI Code-Page abhängt....)

-Michael

Bernd82
Beiträge: 53
Registriert: Di 22. Sep 2009, 15:12

Re: #228 ---> 'ä'

Beitrag von Bernd82 »

Hallo mschnell,

doch, doch, mittlerweile hab' ich's gerafft. Aber ich kann leider nicht vorhersehen, mit welcher Codepage welcher User meiner Software arbeitet(e). Ich habe eine deutsche, eine englische und eine französische Version. Die User tauschen z.B. innerhalb ihrer Konzerne auch unter verschiedenen Sprachversionen ihre Dokumente aus. Am aller kompatibelsten scheint mir dazu die CP1252 zu sein. Wir überlegen uns, in Zukunft ggf. Lazarus statt Delphi einzusetzen. Insbesondere auch im Hinblick darauf, eine native Linux-Version zu erzeugen.

Gruß Bernd

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: #228 ---> 'ä'

Beitrag von wp_xyz »

In der Unit lconvencoding gibt es eine Funktion "GuessEncoding", der man ein Sample des zu konvertierenden Strings mitgibt und die daraus die betreffende CodePage ermittelt. Die ermittelte CodePage kannst du dann in "ConvertEncoding" eintragen. Also:

Code: Alles auswählen

 
var
  codepage: String;
begin
  codepage := GuessEncoding(TextProbe);
  utf8Text := ConvertEncoding(MeinGanzerText, codepage, 'utf8');
 

Hat bei mir bei den wenigen Malen, in denen ich das brauchte, funktionert.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: #228 ---> 'ä'

Beitrag von theo »

wp_xyz hat geschrieben:In der Unit lconvencoding gibt es eine Funktion "GuessEncoding", der man ein Sample des zu konvertierenden Strings mitgibt und die daraus die betreffende CodePage ermittelt. Die ermittelte CodePage kannst du dann in "ConvertEncoding" eintragen. Also:

Code: Alles auswählen

 
var
  codepage: String;
begin
  codepage := GuessEncoding(TextProbe);
  utf8Text := ConvertEncoding(MeinGanzerText, codepage, 'utf8');
 

Hat bei mir bei den wenigen Malen, in denen ich das brauchte, funktionert.


GuessEncoding kann nicht versch. ANSI Codepages unterscheiden, bzw. nur wenn der Stream einen Header in der Form {%encoding blah hat, was normalerweise nicht der Fall ist. Ansonsten unterscheidet es nur UTF-8 von UCS-2 von ANSI und macht noch Annahmen über den Systemstandard.
Hilft also eig. nicht viel für ANSI CodePages, weil das auch kaum möglich ist.
Woran willst du erkennen, ob eine Folge von einzelnen Bytes Kyrillisch oder Lateinisch oder Griechisch etc. meint?
Das ginge höchstens mit Wörterbüchern u.ä.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: #228 ---> 'ä'

Beitrag von mschnell »

Bernd82 hat geschrieben:Am aller kompatibelsten scheint mir dazu die CP1252 zu sein.

Am kompatibelsten ist Unicode. Das ist genau für diesen Zweck erfunden worden.

Michael

Bernd82
Beiträge: 53
Registriert: Di 22. Sep 2009, 15:12

Re: #228 ---> 'ä'

Beitrag von Bernd82 »

mschnell hat geschrieben:Am kompatibelsten ist Unicode.

Das ist klar. Nach Unicode will ich ja hin. Ich komme aber von einer leider unbekannten CodePage. Ich meine daher, dass ich die wenigsten Probleme erzeuge, wenn ich davon ausgehe, dass die User (englisch (GB, US, etc.), deutsch (DE,AT,CH), französisch (F,CH etc.)) die CP1252 verwendet hätten. Damit sind die Sonderzeichen dieser Kulturkreise abgedeckt.

Danke nochmal allen für die schnelle Hilfe!

Antworten