AnsiToUTF8

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Heinrich Wolf
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

Beitrag von Heinrich Wolf »

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
Dateianhänge
umlaute.lpr
(1.16 KiB) 87-mal heruntergeladen

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

Re: AnsiToUTF8

Beitrag von theo »

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.

Heinrich Wolf
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

Beitrag von Heinrich Wolf »

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

MAC
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

Beitrag von MAC »

Versuch Compileranweisungen?

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}
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

Signatur := nil;

Heinrich Wolf
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

Beitrag von Heinrich Wolf »

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

Maik81ftl
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

Beitrag von Maik81ftl »

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 was MAC damit einen könnte ist das die Art ggf. net laufen könnte.

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}
Wenn Delphi des so macht, braucht man denne nur einmal schreiben und sollte denne a laufen. wenn aber noch 64bit System zukommen und diese eine noch anderer Verwaltung haben als 32 bit und linux, dann musst alles extra erfragen.

Die {$IFDEF xxx} fragen nach einem Beriebssystem, soweit ich das im Filter hab.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

MAC
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

Beitrag von MAC »

Ich war zu faul den anhang runterzuladen :)

Code: Alles auswählen

Signatur := nil;

pluto
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

Beitrag von pluto »

Als Text Datei wäre es nicht schlecht. So könnte man es sich direkt im Web-Browser anschauen nicht?
MFG
Michael Springwald

Heinrich Wolf
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

Beitrag von Heinrich Wolf »

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.

Scotty
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

Beitrag von Scotty »

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.
Na ein Glück, dass die Lazarus-Entwickler Deine Forderung schon bedacht habe: GuessEncoding(). :mrgreen:
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.

Antworten