ValueListEditor und Umlaute
-
- Beiträge: 16
- Registriert: Do 16. Jul 2009, 16:16
- OS, Lazarus, FPC: Win XP und Win2000 (L 1.1 FPC 2.6.1)
- CPU-Target: xxBit
ValueListEditor und Umlaute
Ich habe ein Problem mit dem ValueListEditor. Ich kann zwar Werte mit Umlauten per Programmcode einfügen, diese auch (mittels xmlpropstorage) abspeichern (in der xml-Datei sind die Umlaute korrekt vorhanden).
Beim Einlesen (auch über xmlpropstorage) gehen mir allerdings die Umlaute verloren.
Ich hänge mal ein Mini-Programm an, an dem man sieht, dass das Einlesen über xmlpropstorage für Editfelder, Stringgrids funktioniert, allerdings nicht der Eintrag in den ValueListeditor.
Danke fürs anschauen
Thomas
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: ValueListEditor und Umlaute
Was heißt "Korrekt" ?Hallenberger hat geschrieben:in der xml-Datei sind die Umlaute korrekt vorhanden).
In welcher Kodierung ist die XML-Datei gespeichert ? (Wenn Du die Umlaute "Korrekt" siehst, heißt das nur, dass Deine Anzeige-Software "zufällig" die Codierung verwendet, in der das Programm die Datei abgelegt hat.)
Ohne eine explizite Code - Definition nimmt der XML-Leser vermutlich default-mäßig ASCII an und da gibt es keine Umlaute.
-Michael
-
- Beiträge: 16
- Registriert: Do 16. Jul 2009, 16:16
- OS, Lazarus, FPC: Win XP und Win2000 (L 1.1 FPC 2.6.1)
- CPU-Target: xxBit
Re: ValueListEditor und Umlaute
Hallo!
Laut erster Zeile der xml-Datei: <?xml version="1.0" encoding="utf-8"?>.
Ich habe für mein Testprogramm nur ein xmlpropstorage auf das form gezogen, sonst keine Einstellungen gemacht.
Allerdings könnte es auch ein Problem mit Windows-XP sein, denn hier
http://forum.lazarus.freepascal.org/ind ... icseen#new
scheint es zu funktionieren.
Es ist für mich allerdings verwirrend, dass der selbe code für unterschiedliche Elemente unterschiedliche Ergebnisse liefert.
Aber schon mal danke fürs Drüberschauen.
thomas
Laut erster Zeile der xml-Datei: <?xml version="1.0" encoding="utf-8"?>.
Ich habe für mein Testprogramm nur ein xmlpropstorage auf das form gezogen, sonst keine Einstellungen gemacht.
Allerdings könnte es auch ein Problem mit Windows-XP sein, denn hier
http://forum.lazarus.freepascal.org/ind ... icseen#new
scheint es zu funktionieren.
Es ist für mich allerdings verwirrend, dass der selbe code für unterschiedliche Elemente unterschiedliche Ergebnisse liefert.
Aber schon mal danke fürs Drüberschauen.
thomas
-
- Beiträge: 16
- Registriert: Do 16. Jul 2009, 16:16
- OS, Lazarus, FPC: Win XP und Win2000 (L 1.1 FPC 2.6.1)
- CPU-Target: xxBit
Re: ValueListEditor und Umlaute
Hallo nochmals.
Jetzt habe ich das Programm unter Linux (Debian) mit (ebenfalls) Lazarus 1.3/fpc 2.7.1 übersetzt und laufen gelassen: Alles funktioniert. Scheint also ein Problem unter Windows XP und auch unter Windows 7 zu sein.
Danke
Thomas
Jetzt habe ich das Programm unter Linux (Debian) mit (ebenfalls) Lazarus 1.3/fpc 2.7.1 übersetzt und laufen gelassen: Alles funktioniert. Scheint also ein Problem unter Windows XP und auch unter Windows 7 zu sein.
Danke
Thomas
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: ValueListEditor und Umlaute
Anscheinend achtet das Programm, das die XML-Datei schreibt oder liest nicht auf die angegebene Codierung und verwendet unter Windows nicht UTF-8
-Michael
-Michael
-
- Beiträge: 16
- Registriert: Do 16. Jul 2009, 16:16
- OS, Lazarus, FPC: Win XP und Win2000 (L 1.1 FPC 2.6.1)
- CPU-Target: xxBit
Re: ValueListEditor und Umlaute
Hallo!mschnell hat geschrieben:Anscheinend achtet das Programm, das die XML-Datei schreibt oder liest nicht auf die angegebene Codierung und verwendet unter Windows nicht UTF-8
-Michael
Das stimmt so nicht, denn:
In dem Programm speichert und liest das xmlpropstorage ohne irgendwelchen Zusatzangaben. Der _gleiche_ Lesebefehl wird benutzt um den selben Wert einmal in ein Editfeld, in ein Stringgrid und in einen valuelisteditor zu übertragen.
Nur beim Valuelisteditor gehen die Umlaute verloren!
qed.
Ist aber schon als bug gemeldet
Danke
thomas
Re: ValueListEditor und Umlaute
Ich kann den Fehler bestätigen unter Win7 64bit, Lazarus 1.3 r45781M FPC 2.7.1 i386-win32-win32/win64.
Scheinbar wird beim Einlesen des Strings irgendwas verhauen (TCustomXMLPropStorage.DoReadString)?!
In einem TMemo wird der String ebenfalls nicht richtig angezeigt.
Als Workaround hilft Dir wahrscheinlich (zumindest bei mir funktioniert das):
@Hallenberger: Kannst Du mal den Bugeintrag-Link hier anhängen, ich konnte ihn nicht finden?!
Scheinbar wird beim Einlesen des Strings irgendwas verhauen (TCustomXMLPropStorage.DoReadString)?!
In einem TMemo wird der String ebenfalls nicht richtig angezeigt.
Als Workaround hilft Dir wahrscheinlich (zumindest bei mir funktioniert das):
Code: Alles auswählen
function ConvertStr(Str: String): String;
var
i: Integer;
begin
Result:='';
for i:=1 to Length(Str) do
Result:=Result + Str[i];
end;
Procedure Tform1.Xmlpropstorage1restoreproperties(Sender: TObject);
Begin
...
vle.InsertRow('Umlaute', ConvertStr(XMLPropStorage1.ReadString('Hi', 'nix')), True);
End;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 16
- Registriert: Do 16. Jul 2009, 16:16
- OS, Lazarus, FPC: Win XP und Win2000 (L 1.1 FPC 2.6.1)
- CPU-Target: xxBit
Re: ValueListEditor und Umlaute
Danke fürs Testen. Hier der link zum Bugeintrag: http://bugs.freepascal.org/view.php?id=26449Michl hat geschrieben:Ich kann den Fehler bestätigen unter Win7 64bit, Lazarus 1.3 r45781M FPC 2.7.1 i386-win32-win32/win64.
@Hallenberger: Kannst Du mal den Bugeintrag-Link hier anhängen, ich konnte ihn nicht finden?!
Re: ValueListEditor und Umlaute
Danke!
Im Lazarus Trunc ist das Problem behoben, das Problem, dass der String im Memo nicht richtig angezeigt wird, bleibt. Ich habe eben einen Bugreport und Patch dazu gemacht: http://mantis.freepascal.org/view.php?id=26453
Den Lazarus-Patch für Revision 45782 habe ich mir angesehen. Es scheint wichtig zu sein, wie der String erstellt wird:
Im Lazarus Trunc ist das Problem behoben, das Problem, dass der String im Memo nicht richtig angezeigt wird, bleibt. Ich habe eben einen Bugreport und Patch dazu gemacht: http://mantis.freepascal.org/view.php?id=26453
Den Lazarus-Patch für Revision 45782 habe ich mir angesehen. Es scheint wichtig zu sein, wie der String erstellt wird:
Code: Alles auswählen
var
s: String;
...
//funktionierende Zuweisung (durch Umweg über Insert)
s:='';
Insert(XMLPropStorage1.ReadString('Hi', 'nix'), s, 1);
memo1.Lines.Add(s);
//fehlerhafte Zuweisung, es wird ein "?" im Memo für die Umlaute angezeigt
s:=XMLPropStorage1.ReadString('Hi', 'nix');
memo1.Lines.Add(s);
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: ValueListEditor und Umlaute
Sind da schon "Delphi new Strings" (mit halb-dynamischer Encodierung ) am Werk ?Michl hat geschrieben: //funktionierende Zuweisung (durch Umweg über Insert)...
-Michael
Re: ValueListEditor und Umlaute
In 1.3 ja (Du hast ja auch schon öfters auf die Buganfälligkeit dieser hingewiesen).mschnell hat geschrieben:Sind da schon "Delphi new Strings" (mit halb-dynamischer Encodierung ) am Werk ?
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: ValueListEditor und Umlaute
Die "Delphi new Strings" mit halb-dynamischer Encodierung sind ja im Prinzip eine schöne Idee. Aber schon in Delpi XE ist die Umsetzung fragwürdig. Bei Lazarus, das ja mehrere Plattformen unterstützen muss, und deshalb die jeweils "nativen" String Codierungen voll unterstützt muss, ist es noch viel schwieriger, das Prinzip vernünftig umzusetzen.
Und jetzt wird in fpc eine "Delphi-XE kompatibel" unflexible Umsetzung (TTstrings und damit TStringList verwendet eine feste String-Codierung und kann also nicht (in einem Projekt) für unterschiedliche Codierungen eingesetzt werden, ohne dass da ständig umcodiert wird). Das führt für Lazarus zwangsweise in eine Sackgasse.
-Michael
Und jetzt wird in fpc eine "Delphi-XE kompatibel" unflexible Umsetzung (TTstrings und damit TStringList verwendet eine feste String-Codierung und kann also nicht (in einem Projekt) für unterschiedliche Codierungen eingesetzt werden, ohne dass da ständig umcodiert wird). Das führt für Lazarus zwangsweise in eine Sackgasse.
-Michael