Lazarus charset - Umlaute

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.

Lazarus charset - Umlaute

Beitragvon PMPaco » 1. Mär 2008, 10:47 Lazarus charset - Umlaute

Hallo,
mein Problem ist, das Anzeigen von Umlauten eines Textes in einem SynMemo. Umlaute werden aus irgendeinem Grund als Fragezeichen angezeigt. Die Daten kommen definitiv korrekt beim SynMemo an.

Ich nutze Lazarus 0.9.24 Beta auf Ubuntu Linux.

Danke schon mal im Voraus.
PMPaco
 
Beiträge: 7
Registriert: 1. Mär 2008, 10:35

Beitragvon Christian » 1. Mär 2008, 11:10

Du versuchst ANSI in einem Unicode Control darzustellen.
Du musst den text vorher in UTF-8 umwandeln. (UTF8Encode)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Christian
 
Beiträge: 6091
Registriert: 21. Sep 2006, 06:51
Wohnort: Dessau
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z) | 
CPU-Target: AVR,ARM,x86(-64)
Nach oben

Beitragvon PMPaco » 1. Mär 2008, 11:39

Danke erstmal. Das hatte ich leider schon erfolglos probiert. Die Funktion UTF8Encode hat keine Wirkung. Umlaute werden noch immer nicht dargestellt.
PMPaco
 
Beiträge: 7
Registriert: 1. Mär 2008, 10:35

Beitragvon Christian » 1. Mär 2008, 11:46

Das GTK1 Interface unterstützt Unicode auch nicht vollständig es kommt möglicherweise auch aufs Control an. Du kannst auch den Systemzeichensatz auf einen nicht Unicode Zeichensatz setzen dann sollte es mit ANSI klappen. Das wirde hier schon 2-3 mal diskutiert ich hab den verlauf aber nicht mehr vollends im Kopf musst mal suchen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Christian
 
Beiträge: 6091
Registriert: 21. Sep 2006, 06:51
Wohnort: Dessau
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z) | 
CPU-Target: AVR,ARM,x86(-64)
Nach oben

Beitragvon PMPaco » 1. Mär 2008, 11:58

Okay. Hab zwar GTK2 beim Compiler verwendet, trotzdem noch das Problem. Ich such mal. Dankeschön...
PMPaco
 
Beiträge: 7
Registriert: 1. Mär 2008, 10:35

Beitragvon PMPaco » 1. Mär 2008, 13:56

Ok. Ich bitte abermals um Hilfe. Leider ist das Problem nach wie vor nicht in den Griff zu bekommen. Alles durchgegoogled und bei Wiki belesen. Hilft nichts. Was benötige ich, um in TMemo Umlaute zu laden? Reinschreiben kann man sie ja. Auch wenn ich die Var mit dem Content speichere: alles da. Nur das übertragen des Variableninhaltes in das Memo bringt weiterhin Fragezeichen vor.
PMPaco
 
Beiträge: 7
Registriert: 1. Mär 2008, 10:35

Beitragvon PMPaco » 1. Mär 2008, 15:03

*push*
PMPaco
 
Beiträge: 7
Registriert: 1. Mär 2008, 10:35

Beitragvon theo » 1. Mär 2008, 15:48

Klappt bei mir Problemlos.

Wie lädst du das genau rein? Läuft deine IDE unter GTK1 oder GTK2?
Wie sieht deine $LANG aus?
theo
 
Beiträge: 7869
Registriert: 11. Sep 2006, 18:01

Beitragvon PMPaco » 1. Mär 2008, 16:19

Ich entnehme die Daten einer MySQL Datenbank. Diese wiederum ist "latin1_german1_ci" codiert. Meine IDE läuft unter GTK2, genau wie der Compiler. Meine $LANG ist komplett "de_DE.UTF-8". Tja, ich sitz jetzt schon den ganzen Tag. Keine Ahnung, was da los ist. Danke auch an dich.
Grüße
PMPaco
 
Beiträge: 7
Registriert: 1. Mär 2008, 10:35

Beitragvon theo » 1. Mär 2008, 16:32

Ach so. Dann kannst du entweder die DB-Tabelle auf Unicode umstellen, oder das hier Probieren (Beispiel Anhand einer Latin1 Datei):

Code: Alles auswählen
procedure LongToWide(const Buf: Pointer; const BufSize: Integer;
    const DestBuf: Pointer);
var I : Integer;
    P : Pointer;
    Q : Pointer;
    V : LongWord;
begin
  if BufSize <= 0 then
    exit;
  P := Buf;
  Q := DestBuf;
  For I := 1 to BufSize div 4 do
    begin
      V := PLongWord(P)^;
      Inc(PLongWord(P));
      PLongWord(Q)^ := (V and $FF) or ((V and $FF00) shl 8);
      Inc(PLongWord(Q));
      V := V shr 16;
      PLongWord(Q)^ := (V and $FF) or ((V and $FF00) shl 8);
      Inc(PLongWord(Q));
    end;
  For I := 1 to BufSize mod 4 do
    begin
      PWord(Q)^ := PByte(P)^;
      Inc(PByte(P));
      Inc(PWord(Q));
    end;
end;
 
 
function LongStringToWideString(const S: AnsiString): WideString;
var L : Integer;
begin
  L := Length(S);
  SetLength(Result, L);
  if L = 0 then
    exit;
  LongToWide(Pointer(S), L, Pointer(Result));
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var Sli:TStringList;
begin
 if OpenDialog1.Execute Then
 begin
  Sli:=TStringList.create;
  Sli.LoadFromFile(OpenDialog1.FileName);
  Memo1.text:=UTF8Encode(LongStringToWideString(Sli.text));
  Sli.free;
 end;
end;


Vielleicht gibt's für diese Umwandlung auch eine eingebaute Funktion, kenn ich aber nicht.
theo
 
Beiträge: 7869
Registriert: 11. Sep 2006, 18:01

Beitragvon PMPaco » 2. Mär 2008, 13:31

Ich werds gleich mal probieren. Vielen Dank. Klasse Forum hier.
GreEtz
PMPaco
 
Beiträge: 7
Registriert: 1. Mär 2008, 10:35

Beitragvon KOBOLD Messring GmbH » 13. Jun 2008, 08:46

Ähnliches Problem hatte ich auch bei folgender Konstellation:

Lazarus und Widget-Set: gtk2
MySQL-Datenbank Kodierung: UTF8_general_ci
Memo und ListBox.Font.CharSet = DEFAULT_CHARSET

diese Kombination ist die EINZIGE, wo überhaupt "lesbare" Buchstaben aus den Datensätzen angezeigt werden, AUSSER NATÜRLICH Umlaute werden als Fragezeichen dargestellt
Bei anderen Font.CharSet settings (z.B. UNICODE oder ANSI-CHARSET)
werden nur Kästchen statt Buchstaben dargestellt, sehr unschön...

¡¡ Die LongStringToWideString Routine von theo wirkt Wunder !!
Damit funktioniert's, endlich erscheint "Köln" als "Köln" und nicht mehr als "K?ln"
KOBOLD Messring GmbH
 
Beiträge: 155
Registriert: 22. Aug 2007, 13:52
Wohnort: 65719 Hofheim am Taunus
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4) | 
CPU-Target: 32Bit
Nach oben

Beitragvon gtmind.de » 11. Okt 2017, 21:36 Re: Lazarus charset - Umlaute

Danke an theo :D :)
Firebird Datenbank, Alte Daten welche mit Delphiprogramm eingegeben wurden (ne ganze menge) keine Umlaute.
Mit LongstringToWidestring gehts :twisted:
Auch aus Steinen, die einem in den Weg gelegt werden, kann man etwas schönes bauen.
gtmind.de
 
Beiträge: 3
Registriert: 27. Feb 2011, 16:23
Wohnort: Dessau-Roßlau
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.4.z) | 
CPU-Target: AMD 32/64 bit
Nach oben

• Themenende •

Zurück zu Sonstiges



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried