Lazarus charset - Umlaute
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.
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.
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
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/
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.
Ach so. Dann kannst du entweder die DB-Tabelle auf Unicode umstellen, oder das hier Probieren (Beispiel Anhand einer Latin1 Datei):
Vielleicht gibt's für diese Umwandlung auch eine eingebaute Funktion, kenn ich aber nicht.
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;
-
- Beiträge: 155
- Registriert: Mi 22. Aug 2007, 14:52
- OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 65719 Hofheim am Taunus
- Kontaktdaten:
Ä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"
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"
-
- Beiträge: 9
- Registriert: So 27. Feb 2011, 16:23
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.4.z)
- CPU-Target: AMD 32/64 bit
- Wohnort: Dessau-Roßlau
- Kontaktdaten:
Re: Lazarus charset - Umlaute
Danke an theo
Firebird Datenbank, Alte Daten welche mit Delphiprogramm eingegeben wurden (ne ganze menge) keine Umlaute.
Mit LongstringToWidestring gehts


Firebird Datenbank, Alte Daten welche mit Delphiprogramm eingegeben wurden (ne ganze menge) keine Umlaute.
Mit LongstringToWidestring gehts

Auch aus Steinen, die einem in den Weg gelegt werden, kann man etwas schönes bauen.