ValueListEditor und Umlaute

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
Antworten
Hallenberger
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

Beitrag von Hallenberger »

umlauttest1.zip
(127.46 KiB) 79-mal heruntergeladen
Hallo!

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

mschnell
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

Beitrag von mschnell »

Hallenberger hat geschrieben:in der xml-Datei sind die Umlaute korrekt vorhanden).


Was heißt "Korrekt" ?

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

Hallenberger
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

Beitrag von Hallenberger »

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/index.php?topic=25089.new;topicseen#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

Hallenberger
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

Beitrag von Hallenberger »

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

mschnell
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

Beitrag von mschnell »

Anscheinend achtet das Programm, das die XML-Datei schreibt oder liest nicht auf die angegebene Codierung und verwendet unter Windows nicht UTF-8

-Michael

Hallenberger
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

Beitrag von Hallenberger »

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


Hallo!
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

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: ValueListEditor und Umlaute

Beitrag von Michl »

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):

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;                       

@Hallenberger: Kannst Du mal den Bugeintrag-Link hier anhängen, ich konnte ihn nicht finden?!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Hallenberger
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

Beitrag von Hallenberger »

Michl 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?!


Danke fürs Testen. Hier der link zum Bugeintrag: http://bugs.freepascal.org/view.php?id=26449

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: ValueListEditor und Umlaute

Beitrag von Michl »

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:

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; 

mschnell
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

Beitrag von mschnell »

Michl hat geschrieben: //funktionierende Zuweisung (durch Umweg über Insert)...


Sind da schon "Delphi new Strings" (mit halb-dynamischer Encodierung ) am Werk ?

-Michael

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: ValueListEditor und Umlaute

Beitrag von Michl »

mschnell hat geschrieben:Sind da schon "Delphi new Strings" (mit halb-dynamischer Encodierung ) am Werk ?
In 1.3 ja (Du hast ja auch schon öfters auf die Buganfälligkeit dieser hingewiesen).

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

mschnell
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

Beitrag von mschnell »

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

Antworten