AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Prism Deppenfrage: Wie sieht UTF-8 aus?
Thema durchsuchen
Ansicht
Themen-Optionen

Deppenfrage: Wie sieht UTF-8 aus?

Ein Thema von alzaimar · begonnen am 2. Okt 2007 · letzter Beitrag vom 2. Okt 2007
Antwort Antwort
Seite 1 von 2  1 2      
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

Deppenfrage: Wie sieht UTF-8 aus?

  Alt 2. Okt 2007, 12:38
Hi

Is mir das peinlich: Ich streite mich grad mit unserem XML/C# Guru. Der meint nämlich, seine XML-Datei sei astreines UTF-8.
XML-Code:
<?xml version="1.0" encoding="utf-8"?>
<Object xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Test>äöü
  </Test>
</Object>
Man beachte die Umlaute. Ist das jetzt UTF-8 oder nicht?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von stz
stz

Registriert seit: 8. Sep 2005
Ort: Neuendeich, Lübeck
277 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Deppenfrage: Wie sieht UTF-8 aus?

  Alt 2. Okt 2007, 12:42
Das wird dir so keiner beantworten können. Um das zu beurteilen, muss man schon die Original-Datei ansehen. (Wenn der Editor, mit dem du die Datei geöffnet hast, um den Code hier in das Posting zu kopieren, UTF-8 beherrscht hat, dann sieht so UTF-8 aus )

Gruß
Malte
Malte Schmitz
Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.

Entwickler des HTML-Editors MEdit (DP)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Deppenfrage: Wie sieht UTF-8 aus?

  Alt 2. Okt 2007, 12:45
Delphi-Quellcode:
procedure TForm1.btClick(Sender: TObject);
Const
  sXML = '<?xml version="1.0" encoding="utf-8"?>'
  +'<Object xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'
  +'<Test>äöü</Test></Object>';
Var
  x : ixmlDocument;

begin
  x := loadxmlData (sXML);
So, und jetzt?

Das Witzige ist: Der Code funktioniert unter Delphi (Win32) *nicht*, aber unter Delphi.NET schon.

Eigentlich will ich so ein XML-Objekt mal eben einlesen, irgendwo manipulieren und dann wieder zurückliefern. Beim Zurückliefern sind die Umlaute dann aber futsch.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#4

Re: Deppenfrage: Wie sieht UTF-8 aus?

  Alt 2. Okt 2007, 12:48
UTF-8 ist eine Zeichenkodierung, die jegliches Unicode-Zeichen darstellen kann. Im Zweifel kannst du dir die Datei ja mal im Hex-Editor angucken, um zu sehen, ob die Umlaute ASCII-Zeichen sind oder eben etwas anderes. Oder du öffnest die Datei im Firefox und schaltest die Kodierung auf ASCII um. Sind die Umlaute dann plötzlich zwei komische Zeichen, bei UTF-8-Kodierung jedoch Umlaute, dann ist es wohl UTF-8.

Allerdings habe ich es irgendwie dunkel in Erinnerung, dass man Umlaute in XML bei UTF-8-Kodierung escapen musste und "echte" Unicode-Umlaute somit nicht gültiges XML wären. Aber hier kann mich meine Erinnerung trügen.

Edit: Wenn Delphi/Win32 das nicht kann, Delphi/.NET aber schon, dann spricht das schon für Unicode, oder?
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Deppenfrage: Wie sieht UTF-8 aus?

  Alt 2. Okt 2007, 12:56
Zitat von alzaimar:
Das Witzige ist: Der Code funktioniert unter Delphi (Win32) *nicht*, aber unter Delphi.NET schon.
Delphi für Win32 benutzt kein Unicode, unter DotNet ist dies der Standard. Setze mal encoding="iso-8991-1" ein, das sollte gehen.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#6

Re: Deppenfrage: Wie sieht UTF-8 aus?

  Alt 2. Okt 2007, 12:59
Einfache Möglichkeit wäre der Weg über die Dateigröße. Die ist dann UTF-8, wenn die Datei genau doppelt so groß ist, wie die Anzahl der Zeichen, die gespeichert werden plus 3 Bytes für den UTF-8 Header. Die drei Bytes werden gerne weggelassen nd das geht i.A. auch.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Deppenfrage: Wie sieht UTF-8 aus?

  Alt 2. Okt 2007, 13:03
Hechel... Ihr seit Klasse, Jungs, aber ich will seit 10 Minuten ne Antwort posten und komm nicht dazu...

Wenn ich den Beispielcode ausführe (mit dem Umlaute-XML im CONST, also eigentlich *kein* UTF-8 ), dann liest LoadXMLData die Umlaute trotzdem ein, obwohl Umlaute ja eigentlich nach UTF-8 kodiert sein müssten. Na gut, mir egal, geht ja so. Aber jetzt:

Speichere ich das Objekt mit SaveToXML(MyString) wieder ab, sieht das Ganze so aus:
XML-Code:
<?xml version="1.0" encoding="utf-8"?>
<Object xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Test>äöü</Test>
</Object>
Um das nun wieder per LoadXMLData einzulesen, muss Ich das(den? die?) BOM vorne abschnippeln und (und das kapier ich einfach nicht) den String per UTF8Decode erstmal dekodieren.

So, und das erklär mir mal einer, denn wozu steht denn im XML 'encoding="utf-8"' drin, wenn ich das sowieso per Hand vorher durchführen muss? Dann kann ich das &/$%&-encoding doch gleich weglassen...

Ich dachte, ich kann sowas machen:

Delphi-Quellcode:
x := LoadXMLData (MyXMLString);
x.SaveToXML (sAnotherString);
x1 := LoadXMLData (sAnotherString);
// x und x1 sollen exakt die gleichen Daten enthalten. Stimmt nur nicht.
Mathematisch gesehen, sollte 'SaveToXML' die Umkehrfunktion von 'LoadXMLData' sein.
Das klappt nur nicht, sondern erst, wenn ich mir einen abbreche:
Delphi-Quellcode:
x := LoadXMLData (MyXMLString);
x.SaveToXML (sAnotherString);
// Dekodieren
sAnotherString := UTF8Decode(sAnotherString);
// BOM wegschnippeln
while sAnotherString[1]<>'<do
  sAnotherString:= copy(sAnotherString, 2, maxint);
x1 := LoadXMLData (sAnotherString);
// x und x1 enthalten exakt die gleichen Daten
Hab ich nun den Denkfehler, oder ist da was faul im Staate Dot.Net /XML ?

Ich hab in meinem jungendlichen Leichtsinn echt gedacht, das XML das alles für mich regelt...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#8

Re: Deppenfrage: Wie sieht UTF-8 aus?

  Alt 2. Okt 2007, 13:04
@sakura:
Der Weg mit der Dateigröße führt nicht wirklich zum Ziel. Habe gerade testweise das Alphabet als UTF-8 gespeichert. Wie erwartet 29 Byte (BOM + 26 Buchstaben). Der Witz von UTF-8 ist ja gerade, dass im Gegensatz zu UTF-16 oder UCS-2 die häufigsten (ASCII-)Zeichen nur ein Byte belegen.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

Re: Deppenfrage: Wie sieht UTF-8 aus?

  Alt 2. Okt 2007, 13:05
Zitat von sakura:
EDie ist dann UTF-8, wenn die Datei genau doppelt so groß ist
Wofür das 8 bei UTF-8 wohl nur stehen mag?
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#10

Re: Deppenfrage: Wie sieht UTF-8 aus?

  Alt 2. Okt 2007, 13:09
Zitat von jbg:
Wofür das 8 bei UTF-8 wohl nur stehen mag?
Ich war mal gedanklick wieder auf Unicode aus Aber das mit den drei Bytes bleibt weiterhin so

......

P.S.: By Unicode (Little-Endian) ist der Header dann widerum nur 2 Bytes
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz