#228 ---> 'ä'

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Bernd82
Beiträge: 53
Registriert: Di 22. Sep 2009, 15:12

#228 ---> 'ä'

Beitrag von Bernd82 »

Wie kann ich aus ANSI #228 bzw. aus Char(228) einen String mit einem 'ä' drin machen :?: Ich habe schon verstanden, dass ein AnsiString das 'ä' in zwei Zeichen speichert :idea: Arbeitet Freepascal eigentlich mit UTF-8 oder Unicode oder mit was? Ich habe schon herum gesucht, aber nichts richtig gefunden. Bei "AnsiString" steht leider nix - der AnsiString ist aber auch kein Ansicode-String mehr :roll:

Danke im Voraus! Gruß Bernd

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

Re: #228 ---> 'ä'

Beitrag von theo »

Lazarus arbeitet mit UTF-8 also Unicode.
Erkläre doch bitte in einem erweiterten Zusammenhang, was du erreichen möchtest.
Bei Unicode muss man manchmal gewohnte Vorgehensweisen überdenken.

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

Re: #228 ---> 'ä'

Beitrag von Bernd82 »

Ich möchte gerne aus einer Zahl, die einem Ansi-Zeichen entspricht (z.B. #228) einen String machen, der das entsprechende UTF-8 Zeichen enthält (z.B. ä):

Code: Alles auswählen

VAR i:Byte;
    s:String;
BEGIN
  i:=228;
  s:=xyz(i);
  IF s='ä' THEN ...super...
END;
Gibt es eine Funktion xyz, die aus einer Ansi-Zahl einen (UTF-8-) String mit dem entsprechenden Zeichen macht?

Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: #228 ---> 'ä'

Beitrag von Mathias »

Code: Alles auswählen

var
  i: Byte;
  s: string;
begin
  i := 228;
  s := AnsiToUtf8(char(i));
  if s = 'ä' then begin
    Caption := s;
  end;
end;       
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: #228 ---> 'ä'

Beitrag von theo »

Der Code von Mathias funktioniert unter Liniux nicht.

Und dich Bernd82 habe ich nach dem erweiterten Zusammenhang gefragt.
Das was du wiederholst, hatte ich schon verstanden, aber nicht, was du in einem Unicode System damit erreichen willst, bzw. was du mit "ANSI" willst.

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

Re: #228 ---> 'ä'

Beitrag von Bernd82 »

Danke Mathias. Das funktioniert und ist genau was ich brauche!

Hallo theo, ich habe Strings und Chars im Format ANSI und muss sie mit Lazarus z.B. in einem TMemo anzeigen. Warum funktioniert es unter Linux nicht und was müsste ich dort anders machen?

Danke und Gruß Bernd

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

Re: #228 ---> 'ä'

Beitrag von theo »

Bernd82 hat geschrieben: Hallo theo, ich habe Strings und Chars
Woher hast du die? Aus einer Datei?
Oben hast du aber eine Zahl (Byte) welche auf einer bestimmten ANSi Codepage einem Buchstaben 'ä' entspricht.
Lass dir doch nicht alles aus der Nase ziehen. Für eine vernünftige Antwort muss man mehr wissen.

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: #228 ---> 'ä'

Beitrag von Socke »

@theo: Rekursive Grüße an dich :)
Bernd82 hat geschrieben:Warum funktioniert es unter Linux nicht und was müsste ich dort anders machen?
theo hat geschrieben:Lass dir doch nicht alles aus der Nase ziehen. Für eine vernünftige Antwort muss man mehr wissen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

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

Re: #228 ---> 'ä'

Beitrag von theo »

Socke hat geschrieben:@theo: Rekursive Grüße an dich :)
Warum? Ich möchte einfach zuerst wissen worum es geht. Dann kann ich eine passende Antwort geben.
Ist das zuviel verlangt?
Wenn jemand mit 1-Byte ANSI arbeitet, gibt es ja möglicherweise andere Optimierungsmöglichkeiten.

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: #228 ---> 'ä'

Beitrag von Socke »

Für den Fall, das AnsiToUTF8 unter Linux nicht funktioniert, könnte dies ein nicht beabsichtigter Fehler sein, der in einen Bug-Report dokumentiert gehört.
Oder fehlt bei dir der C-WideString-Manager?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

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

Re: #228 ---> 'ä'

Beitrag von theo »

Offenbar geht es hier weiter:

http://forum.lazarus.freepascal.org/ind ... cseen.html

Ich bin dann mal raus.

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

Re: #228 ---> 'ä'

Beitrag von Bernd82 »

Unter Linux kann ich wahrscheinlich die Unit LConvEncoding verwenden. Die Funktionen

Code: Alles auswählen

  CP1252ToUTF8(#228);
  ISO_8859_1ToUTF8(#228);
scheinen jeweils ein 'ä' zu erzeugen bzw. einen alten Ansi-String korrekt in einen Lazarus-String umzusetzen. Danke den Postern, die mir hier geholfen haben! Danke an wp, der mir hier geholfen hat.

Gruß Bernd

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

Re: #228 ---> 'ä'

Beitrag von theo »

Das hätte ich dir auch sagen können. Sieht aber nicht unbedingt nach einer guten Idee aus.
Na egal.

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

Re: #228 ---> 'ä'

Beitrag von Bernd82 »

Hallo theo,

was hältst Du für kritisch? Würdest Du es anders machen? Ich habe Strings aus Dateien, die ANSI-codiert sind. Die muss ich in Lazarus verwenden, verarbeiten und ggf. anzeigen. Nachher muss ich sie wahrscheinlich wieder ANSI-codiert in Dateien zurück schreiben (Dateiformat-Kompatibilität).

Gruß Bernd

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

Re: #228 ---> 'ä'

Beitrag von Bernd82 »

Ich habe mir unter Windows mal alle konvertierten Buchstaben angesehen und bin der Meinung dass

CP1252ToUTF8( )

die bessere Alternative zu sein scheint.

ISO_8859_1ToUTF8( )

hingegen hat eine undefinierte Lücke von Character #128 bis #159. Z.B. das €-Zeichen würde dann fehlen...

Bernd

Antworten