![]() |
Unicode probleme
Hallo,
Ich habe folgendes Problem: Ich möchte aus einem XML file einzelne Strings auslesen, welche chinesische symbole enthalten. Wenn ich mir das XMLFile ausgeben lasse (z.b. im Debugger oder log file), dann werden die symbole auch korrekt dargestellt. Wenn ich jedoch die XML struktur über die Nodes auslese, dann werden gewisse symbole durch Fragezeichen (?) ersetzt (allerdings nur ein paar wenige). Hat jemand eine idee woran das liegen kann? folgendermassen lese ich die nodes aus.
Delphi-Quellcode:
Wenn ich Debugger auf dem Attributes bin, dann sehe ich noch dir korrekten Symbole. In der Variable lStr sind anschliessend allerdings teilweise Fragezeichen enthalten.
XMLReader.LoadFromStream(TStringStream.Create(XMLFilte)) //XMLReader ist TXMLDocument
. . . lStr := Node.Attributes['value']; // Node ist IXMLNode Ich habe auch schon probiert das ganze einem WideString zuzuweisen, allerdings funktionierts dann gar nicht mehr. |
Re: Unicode probleme
Welchen Typ hat lStr?
|
Re: Unicode probleme
Ist ein normaler String.
|
Re: Unicode probleme
Zitat:
Bis dorthin mußt du WideString nehmen. Und lass dich nicht von der IDE verwirren. Erste neuere (D2005/...) IDE Versionen zeigen Widestrings auch korrekt als Widestrings und nicht nur als Strings an. |
Re: Unicode probleme
Es scheint aber trotzdem auch mit Strings zu funktionieren. Wie gesagt sehe ich die chinesischen symbole auf meiner oberfläche es gibt lediglich ein paar symbole welche das IXMLNode (oder wahrscheinlich eher das TXMLDocument) nicht ausgeben können. Wenn ich den parser selber schreiben würde, dann würde es funktionieren!
Allerdings möchte ich das rad nicht neu erfinden.... |
Re: Unicode probleme
Verwendest du VCL.NET oder WinForms?
Dort ist schon String Unicodeenabled. Und was siehtst du bei den nicht ausgebbaren Zeichen? Hier hat vermutlich der Verwendete Font kein Zeichen vorhanden! |
Re: Unicode probleme
Also ich verwende die Standard TLabels (winforms). Also ich sehe die chinesischen Symbole und zwischen drin hat es manchmal Fragezeichen (?) anstelle des korrekten symbols. Das mit der Schrift kann ich mir nicht so richtig vorstellen, da ich es ja z.b. im logfile oder debugger richtig sehe. somit müsste die schriftart im windows installiert sein. (habe übrigens die sprachzusätze für asisatische sprachen installiert und regional settings umgestellt)
|
Re: Unicode probleme
Zitat:
Zitat:
|
Re: Unicode probleme
Ok jetzt habe ich dich falsch verstanden. Ich verwende Delphi (win32) und benutze die Standard TLabels komponente
|
Re: Unicode probleme
das wegen dem codepage dachte ich auch schon. kann es am encoding vom XML file liegen?
|
Re: Unicode probleme
Zitat:
|
Re: Unicode probleme
Ok vielleicht ist unicode der falsche titel. Ich versuche lediglich chinesische symbole darzustellen und so wie es aussieht hat der xml parser probleme alle symbole richtig auszugeben. Die TLabel komponente ist nicht das Problem, da die symbole ja angezeigt werden.
[EDIT] Ich habe als Test alle chinesischen symbole im XML-File direkt dem TLabel (Caption) zugewiesen. Es wurden alle symbole im Label richtig angezeigt (auch die symbole die vorher nur ein Fragezeichen waren). |
Re: Unicode probleme
Du kannst mit TLabel auf einem deutschen System keine vollständige Chinesiche Textdarstellung erreichen. Die verwendung von Charsets/Codepages liefert dir nur eine m.E. Krückenlösung da nur ein Subset von zeichen verwendet werden kann.
|
Re: Unicode probleme
Ja du kannst aber im windows unter regional settings die asiatischen sprachen zusätzlich installieren und anschliessend die code page und die "sprachversion der programme" auf chinesisch umstellen.
Anschliessend siehst du z.b. google.cn in chinesisch. Ich denke daher schon das alle symbole angezeigt werden können. Wie auch gesagt sehe ich im xml file alle symbole korrekt. wenn irgend ein symbol nicht erkannt werden würde, dann würde ich es da schon nicht als symbol sehen. |
Re: Unicode probleme
Kannst du mal ein Testprojekt + Test-XML zusammenstellen und hier posten?
|
Re: Unicode probleme
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Morgen,
Beiliegend habe ich einen kleinen Test gemacht welcher aus einem xml file einen wert ausliest. Ein symbol wird im label nur als ? dargestellt das andere korrekt. Ich habe noch ein printscreen beigelegt, damit man sieht wie die symbole aussehen sollten. Beim label habe ich als Charset das DEFAULT_CHARSET verwendet. Wenn ich ein anderes verwende (z.B. CHINESEBIG5_CHARSET), stimmen die symbole nicht mehr mit dem XML file überein.
Delphi-Quellcode:
Komischerweise funktioniert es mit dem ISO-8859-1 (ist westeuropäisch??!!) encoding am besten. Mit dem UTF-8 encoding geht es nicht.
procedure TForm1.Button1Click(Sender: TObject);
var lNode : IXMLNode; lXMLStream : String; begin lXMLStream := '<?xml version="1.0" encoding="ISO-8859-1"?> ' + ' <el name="" value="記住" /> '; XMLDocument.LoadFromStream(TStringStream.Create(lXMLStream)); lNode := XMLDocument.ChildNodes.FindNode('el'); label1.Caption := lNode.Attributes['value']; //caption ist ?ס label2.Caption := '記住'; end; vielen dank für deine Mühe gruss |
Re: Unicode probleme
Dein Quellcode im Forum ist "verhunzt".
und in deinem JPEG weißt du chinesische Zeichen einem (Ansi-)String zu. Diese werden bei Win32 bis D2007 noch nach der ISO1252-Codepage gecastet. Außerdem ist dein XML (falls du die Chinesischen Zeichen unterbekommst) fehlerhaft Codiert. Diese mußt du codieren (AFAIK &<Hexwert>;). Bei UTF8 als encoding-Angabe mußt du natürlich auch die Daten UTF8-Codiert in deinem XML-string ablegen! |
Re: Unicode probleme
Was meinst du mit verhunzt? Den value siehst du nur wenn dein Betriebssytem auf asiatisch eingestellt hast. (ist dasselbe wenn du google.cn aufrufst). Das mit dem umcodieren ist so eine sache. Die werte sind so abgelegt. Das lässt sich nicht so einfach abändern. oder hast du eine idee?
Wahrscheinlich geht es schneller, wenn ich das xml-file selber parse und die werte auslese. Was ich aber nicht verstehe ist, warum kann der parser nur ein teil der symbole parsen? |
Re: Unicode probleme
Zitat:
Zitat:
Zitat:
|
Re: Unicode probleme
Hallo,
Ja du hast recht, wenn ich mein xml string in ein xml file kopiere und dann im internet explorer anzeigen lasse, dann sehe ich die symbole nicht mehr. wenn ich allerdings das xml file im wordpad aufmache dann funktioniert es. Ich vermute ich weiss auch woran das liegt. Unter Regional settings im Reiter "Erweitert" gibt es den Bereich "Sprache für Programme, die Unicode nicht unterstüzen". Da habe ich die Sprachversion auf chinesisch umgestellt. Notepad und Wordpad sind wahrscheinlich genau solche programme und darum interpretieren sie den wert anders als ein internet explorer der ja ein programm ist welches unicode unterstützt. somit bleibt mir wahrscheinlich nichts anderes übrig als einen eigenen parser zu schreiben. |
Re: Unicode probleme
Zitat:
Zitat:
Zitat:
|
Re: Unicode probleme
hallo,
Ist mir schon klar das Wordpad kein xml-parser ist. Der unterschied liegt ja darin, dass ich das selbe file ( in Wordpad ) in einem chinesischen Betriebsystem anzeigen kann, wohingegen bei einem deutschen Betriebssystem man nur irgend welche character sieht. Also ich habe das xml file ergänzt und das encoding auf UTF-8 gesetzt. Jetzt kann ich das file im explorer öffnen. Mit dem iso... encoding kann er es nicht öffnen.
Delphi-Quellcode:
<?xml version="1.0" encoding="UTF-8"?>
<process name="test"> <element> <label name="testelement" value="糕點(特別食譜)" /> </element> </process> |
Re: Unicode probleme
Häng die XMl_Datei mal als Anhang an.
|
Re: Unicode probleme
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Folgende XML datei kann ich im IE öffnen und wird richtig dargestellt. Habe sie im notepad bearbeitet und als UTF-8 encoding gespeichert. Arbeite im Windowsbetriebssystem mit chinesischen einstellungen. Dafür kriege ich mit dem TXMLDocument nur noch fragezeichen. Liegt das jetzt am TLabel? |
Re: Unicode probleme
Zitat:
gibt mal den Text nicht nach TLabel sondern mittels MessageBoxW aus. |
Re: Unicode probleme
Die Zuweisung per Hand an das Label funktioniert ja, so wird das Problem nicht unbedingt am Label liegen. Eher am XML-Parser
|
Re: Unicode probleme
Ich vermute es könnte daran liegen, dass der parser mir richtige Unicode zeichen zurück gibt, das TLabel aber die unicode zeichen nicht interpretieren kann (da es nicht unicode fähig ist). aber wie gesagt ist nur eine vermutung. Bis jetzt konnte ich es noch nicht beweisen das es so ist.
Habe noch eine kleine Anmerkung: Wenn ich mein XML-File als unicode abspeichere, dann kann ich es im IE nicht öffnen (es kommt eine Fehlermeldung). wenn ich es als ANSI abspeichere, kann ich es zwar im IE aufmachen, allerdings werden die Symbole nicht richtig angezeigt. Wenn ich es hingegen als UTF-8 abspeichere wird es sauber angezeigt. Wenn ich das File im Notepad oder Wordpad aufmache ist es egal wie ich es abgespeichert habe. Die Symbole werden immer richtig angezeigt. |
Re: Unicode probleme
Verwndest du nun Delp.Net oder Delphi Win32. Dem Icon nach ist es Delphi 7. Dessen VCL ist nicht unicode-fähig
|
Re: Unicode probleme
Zitat:
|
Re: Unicode probleme
Ja also eigentlich benutze ich wordpad. Aber wie gesagt im Wordpad / Nodepad kommt es nicht darauf an mit welchem encoding ich es abspeichere. Es wird in diesen Programmen immer korrekt agezeigt.
Ich glaube mein eigentliches Problem ist der Parser nicht mit den TLabels zusammenpasst. |
Re: Unicode probleme
Welche Delphiversion setzt du nun ein?
|
Re: Unicode probleme
oh sorry, benutze delphi 7
|
Re: Unicode probleme
Zitat:
|
Re: Unicode probleme
Zitat:
|
Re: Unicode probleme
ja im windows gibt es die erweiterung, das nicht unicode fähige programme unicode fähig gemacht werden können (regional settings). Damit klappt es eigentlich ganz gut. Wie gesagt kann ich etwa 90% der chinesischen symbole darstellen in meinem Programm. Die restlichen 10% werden (so vermute ich) von meinem parser verschluckt und eben als ? zurück gegeben.
|
Re: Unicode probleme
Zitat:
|
Re: Unicode probleme
Das ist aber kein Unicode. Lade dir mal die
![]() |
Re: Unicode probleme
hallo,
danke werde es mal anschauen |
Re: Unicode probleme
Hallo,
Habs ausprobiert mit den Componenten und es funktioniert auch wenn man richtiges Unicode verwendet. Da in meinen XML-Files (und entsprechend in der Datenbank) so ein zwischen ding gespeichert ist, kann ich meine symbole bei diesen componenten nicht mehr darstellen. |
Re: Unicode probleme
Was verstehst du unter Zwischending? GGf richtiges Unicode in DB und Dateien verwenden
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz