AnsiToUTF8
-
- Beiträge: 323
- Registriert: Di 12. Apr 2011, 13:21
- OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
- CPU-Target: 1core 1,8GHz 32Bit
- Wohnort: Fürth
- Kontaktdaten:
AnsiToUTF8
Hallo,
ich habe ein Testprogramm (Siehe Dateianhang umlaute.lpr) . Das funktioniert unter Delphi1, Delphi5 und Lazarus 0.9.31 für Windows, aber nicht unter Lazarus 0.9.31 für Linux. Dort zeigt es statt äöüßÄÖÜ nur ??????? an. Die Lazarus IDE unter Linux zeigt unter Dateieinstellungen - ZeichenCodierung "ISO 8859-1" an. Der Debugger zeigt in MsgBox Text 7 angekreuzte Kästchen an. Das ist auch richtg so. Aber UTF8Text und TextBuffer sind 7 Fragezeichen. Wie kriege ich hier die Umlaute hinein? Ich möchte portabel bleiben mit AnsiToUTF8 (SysToUTF8 tut auch nicht, was es soll) und ich möchte nicht mehr mit StringReplace(Text, #$C4, #$C3 + #$84, [rfReplaceAll]), usw. arbeiten (das ging).
Gruß
Heiner
ich habe ein Testprogramm (Siehe Dateianhang umlaute.lpr) . Das funktioniert unter Delphi1, Delphi5 und Lazarus 0.9.31 für Windows, aber nicht unter Lazarus 0.9.31 für Linux. Dort zeigt es statt äöüßÄÖÜ nur ??????? an. Die Lazarus IDE unter Linux zeigt unter Dateieinstellungen - ZeichenCodierung "ISO 8859-1" an. Der Debugger zeigt in MsgBox Text 7 angekreuzte Kästchen an. Das ist auch richtg so. Aber UTF8Text und TextBuffer sind 7 Fragezeichen. Wie kriege ich hier die Umlaute hinein? Ich möchte portabel bleiben mit AnsiToUTF8 (SysToUTF8 tut auch nicht, was es soll) und ich möchte nicht mehr mit StringReplace(Text, #$C4, #$C3 + #$84, [rfReplaceAll]), usw. arbeiten (das ging).
Gruß
Heiner
- Dateianhänge
-
- umlaute.lpr
- (1.16 KiB) 87-mal heruntergeladen
Re: AnsiToUTF8
Das geht so nicht und liegt nicht an Lazarus.
Linux benutzt Unicode UTF-8. Linux "weiss nicht" was du mit ANSI meinst, denn es benutzt keine solche Zeichensatztabelle. Für Linux könnte dein ANSI latin sein aber auch kyrillisch etc.
Deshalb gibt es dort Fragezeichen.
Arbeite intern mit UTF-8, für die Ausgabe kannst du dann UTF8ToSys verwenden.
Linux benutzt Unicode UTF-8. Linux "weiss nicht" was du mit ANSI meinst, denn es benutzt keine solche Zeichensatztabelle. Für Linux könnte dein ANSI latin sein aber auch kyrillisch etc.
Deshalb gibt es dort Fragezeichen.
Arbeite intern mit UTF-8, für die Ausgabe kannst du dann UTF8ToSys verwenden.
-
- Beiträge: 323
- Registriert: Di 12. Apr 2011, 13:21
- OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
- CPU-Target: 1core 1,8GHz 32Bit
- Wohnort: Fürth
- Kontaktdaten:
Re: AnsiToUTF8
Ich kann nicht intern mit UTF8 arbeiten, weil ich denselben Quellcode auch auf Delphi 5 compiliere.
Aber inzwischen habe ich herausgefunden, dass ich nicht AnsiToUTF8 sondern CP1252toUTF8 verwenden sollte.
Gruß
Heiner
Aber inzwischen habe ich herausgefunden, dass ich nicht AnsiToUTF8 sondern CP1252toUTF8 verwenden sollte.
Gruß
Heiner
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: AnsiToUTF8
Versuch Compileranweisungen?
Wobei ich keihne anhung hab wie Delphi da reagiert...
Achte darauf das WIN32 nur für 32 bit gilt.
Es gibt auch WIndows oder Win64. (kann Delhpi das ?? )
Allerdings hab ich damit im allgemeinen nur recht wenig erfahrung,
Code: Alles auswählen
{$IFDEF Win32} // Delphi and fpc of 32 Bit Windows
AnsiToUTF8
// intern mit anscii
{$ENDIF}
{$IFDEF linux} // Linux
UTF8toSys
//intern mit utf8
{$ENDIF}
Achte darauf das WIN32 nur für 32 bit gilt.
Es gibt auch WIndows oder Win64. (kann Delhpi das ?? )
Allerdings hab ich damit im allgemeinen nur recht wenig erfahrung,
Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 323
- Registriert: Di 12. Apr 2011, 13:21
- OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
- CPU-Target: 1core 1,8GHz 32Bit
- Wohnort: Fürth
- Kontaktdaten:
Re: AnsiToUTF8
Hallo MAC,
in umlaute.lpr sind doch {$ifdef } drin. Hast Du den Dateianhang angeschaut? Wie hätte ich es sonst auf 4 verschiedenen Compilern testen können? Fehlt nur noch der {$ifdef } für die Endung im Dateisystem, der umlaute.dpr aus umlaute.lpr macht
.
Gruß
Heiner
in umlaute.lpr sind doch {$ifdef } drin. Hast Du den Dateianhang angeschaut? Wie hätte ich es sonst auf 4 verschiedenen Compilern testen können? Fehlt nur noch der {$ifdef } für die Endung im Dateisystem, der umlaute.dpr aus umlaute.lpr macht

Gruß
Heiner
-
- Beiträge: 619
- Registriert: Mi 9. Mär 2011, 16:34
- OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
- CPU-Target: 64Bit
- Wohnort: seit 01.06.2011 in Wahlstedt
Re: AnsiToUTF8
nun was MAC damit einen könnte ist das die Art ggf. net laufen könnte.Heinrich Wolf hat geschrieben:Hallo MAC,
in umlaute.lpr sind doch {$ifdef } drin. Hast Du den Dateianhang angeschaut? Wie hätte ich es sonst auf 4 verschiedenen Compilern testen können? Fehlt nur noch der {$ifdef } für die Endung im Dateisystem, der umlaute.dpr aus umlaute.lpr macht.
Gruß
Heiner
nun weiß ich selber auch nicht, wie Delphi mit Sowas umgeht, sonst würde ich es ggf. noch anderes schreiben.
Code: Alles auswählen
{$IFDEF linux} // Linux
UTF8toSys
//intern mit utf8
{$ELSE}
AnsiToUTF8
// intern mit anscii
{$ENDIF}
Die {$IFDEF xxx} fragen nach einem Beriebssystem, soweit ich das im Filter hab.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache
und der Kreis Segeberg meine LIEBE 


-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: AnsiToUTF8
Als Text Datei wäre es nicht schlecht. So könnte man es sich direkt im Web-Browser anschauen nicht?
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 323
- Registriert: Di 12. Apr 2011, 13:21
- OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
- CPU-Target: 1core 1,8GHz 32Bit
- Wohnort: Fürth
- Kontaktdaten:
Re: AnsiToUTF8
Inzwischen hatte ich ein Problem mit z.B. FormatSettings.LongMonthNames . Bei Linux ist der März in UTF8 codiert. Bei einem deutschen Windows ist er in CP1252 codiert. Das ist schlecht! Ich darf ihn so nicht auf einem Form anzeigen, sonst erscheint ein ? an Stelle des ä. CP1252toUTF8 ist auch nicht geeignet. Ich hab's zwar nicht ausprobiert, aber ich denke, wenn ich das ins Programm einbaue und jemand das auf z.B. einem russischen System laufen lässt, kommt auch etwas Unlesbares heraus. Hier ist glaube ich AnsiToUTF8 in einem ifndef Unix gut. Ich erwarte von AnsiToUTF8, dass es die CodePage des Systems ermittelt, auf dem es läuft und das passende CP*toUTF8 verwendet.
-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: AnsiToUTF8
Na ein Glück, dass die Lazarus-Entwickler Deine Forderung schon bedacht habe: GuessEncoding().Heinrich Wolf hat geschrieben:Ich erwarte von AnsiToUTF8, dass es die CodePage des Systems ermittelt, auf dem es läuft und das passende CP*toUTF8 verwendet.

Ansonsten gilt das, was theo gesagt hat: Arbeite intern mit UTF8.
PS: Wenn man die Unit LConvEncoding öffnet, stehen da alle verfügbaren Funktionen. Du wirst vielleicht auch an ConvertEncoding() interessiert sein.