AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Encoding/Unicode/Zeichensätze

Ein Thema von EConvertError · begonnen am 17. Jan 2007 · letzter Beitrag vom 30. Jan 2007
Antwort Antwort
Seite 2 von 3     12 3      
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#11

Re: Encoding/Unicode/Zeichensätze

  Alt 25. Jan 2007, 19:55
Zitat:
Soweit ich weiss, ist es nicht verpflichtend. Manche Parser wuerden es dann auch garnicht mehr verstehen.
Das heißt, wenn man XML-Dateien richtig einlesen will, müsste man bis zum Encoding-Attribut ANSI lesen und ab dort dann z.B. Unicode (oder was auch immer dort angegeben ist)?

Bei vorhandensein eines BOM könnte ich gleich so wie dadurch angegeben lesen? Weißt du das mit Gewissheit, dass es nicht vorgeschrieben ist?

Zitat:
Schau dir die Datei mal in einem Hexeditor an, dann weisst du es mit Sicherheit.
Werde ich gleich tun.

Der Hintergrund ist nämlich, dass ich verschiede Sourcefiles einlesen möchte und da ist eben auch XML dabei. Und das möchte ich -nach Möglichkeit- richtig machen.

Vielen Dank,
Andreas
Andreas N.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#12

Re: Encoding/Unicode/Zeichensätze

  Alt 25. Jan 2007, 20:23
Hallo,
Zitat von EConvertError:
Das heißt, wenn man XML-Dateien richtig einlesen will, müsste man bis zum Encoding-Attribut ANSI lesen und ab dort dann z.B. Unicode (oder was auch immer dort angegeben ist)?
Stimmt. Wobei IMHO XML-Dateien ohne Encoding-Attribut implizit UTF8-codiert sind.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#13

Re: Encoding/Unicode/Zeichensätze

  Alt 25. Jan 2007, 20:23
Zitat von EConvertError:
Das heißt, wenn man XML-Dateien richtig einlesen will, müsste man bis zum Encoding-Attribut ANSI lesen und ab dort dann z.B. Unicode (oder was auch immer dort angegeben ist)?
Genau.

Zitat von EConvertError:
Bei vorhandensein eines BOM könnte ich gleich so wie dadurch angegeben lesen? Weißt du das mit Gewissheit, dass es nicht vorgeschrieben ist?
Sagen wir mal so, es kommt auf die Quelle der Datei an. Ein Server wuerde den Zeichensatz bspw. im Protokollheader angeben und du muesstest trotzdem noch die Angabe in der Datei beachten. Auf Platte habe ich noch keine XML-Datei gesehen, die einen solchen Marker hatte und auch Unicode war.
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#14

Re: Encoding/Unicode/Zeichensätze

  Alt 26. Jan 2007, 12:58
Dankeschön!

Das finde ich allerdings etwas unbequem.

Zitat:
Auf Platte habe ich noch keine XML-Datei gesehen, die einen solchen Marker hatte und auch Unicode war.
Meine genannte Datei stammt vom .NET-Framework (Konfigurationsdatei) und IMHO schreibt auch VS 2005 ein BOM. Fix ist auch, dass im Encoding-Attribut UTF-8 angegeben ist.

Zitat:
Wobei IMHO XML-Dateien ohne Encoding-Attribut implizit UTF8-codiert sind.
Wikipedia: Wird dieser Parameter [= das Encoding-Attribut] ausgelassen, wird UTF-8 angenommen.

Das heißt praktisch, dass ich, um XML und HTML (das sich ja ähnlich verhält) korrekt zu lesen einen XML/HTML-Parser brauche, da ich, zumindest wenn ich kein BOM finde, das Encoding-Attribut lesen muss.
Und fix ist auch, dass ich die XML-Deklaration mit ANSI lesen MUSS, um alles weitere korrekt weiterlesen zu können.

Wird wohl etwas mehr Arbeit für mich...

Vielen Dank,
Andreas
Andreas N.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.052 Beiträge
 
Delphi 12 Athens
 
#15

Re: Encoding/Unicode/Zeichensätze

  Alt 26. Jan 2007, 17:51
Och, rein theoretisch könnte man XML/RTF-Dateien auch mal nicht als Ansi abspeichern (zum Glück macht keiner sowas) ... dann wäre das mit dem Auslesen recht nett
(erst über's BOM die "Grundcodierung" erkennen und dann darin anhand des Encoding-Attributes)


[add]
also ich meine den Dateiinhalt und nicht den Feld-/Textinhaltinnerhalb der RTF/XML-Struktur.

XML/RTF sind ja im Grunde Textdateien, worin über eine "spezielle" Struktur der eigentliche Text/Feldinhalt verwaltet wird.



reine Textdateien kann man wohl "nur" anhand des BOM unterscheiden.

XML/RTF wird anscheinend als Ansi geseichert und der Inhalt dann entsprechende dem Encoding-Attribut.

und bei den komplexeren Dateien (z.B. DOC, WKS, PDF, ODT...) isses dann über die entsprechenden Dateispezifikationen geregelt.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#16

Re: Encoding/Unicode/Zeichensätze

  Alt 27. Jan 2007, 14:59
Hallo!

Zitat:
erst über's BOM die "Grundcodierung" erkennen und dann darin anhand des Encoding-Attributes
Genau das möchte ich tun. Dann muss ich eben meinen kleinen XML-Parser unicode-fähig machen.

Jetzt schaue ich mal nach, ob ein BOM existiert (das habe ich bereits implementiert). Wenn nicht, lese ich im im "ANSI-Modus". Wenn das Encoding-Attribut ausgelesen ist, passe ich das Encoding gegebenenfalls an.

Für mich stellt sich nun die Frage: Angenommen, ich im Encoding-Attribut steht UTF-8 und ich habe bisher im "ANSI-Modus" gelesen. Muss ich dann z.B. UTF-8 anders behandeln als wenn es bereits so im BOM angegeben wäre?

Oder kann ich dann ganz normal so weiterlesen:
Delphi-Quellcode:
SetLength(MyAnsiString, DasWasHaltNochZuLesenIst div SizeOf(AnsiChar));
      Stream.Read(PAnsiChar(MyAnsiString)^, DasWasHaltNochZuLesenIst );
      MeinEndgültigerWideString := UTF8Decode(MyAnsiString);
Selbiges natürlich bei den anderen Unicodes...

Und rein angenommen, im Encoding-Attribut ist z.B. so etwas krankes (im Sinne von selten ) wie IBM855 angegeben: Kann ich das als ANSI einlesen, oder müsste ich das theoretisch extra encoden? Ich habe nämlich nicht wirklich Lust, hunderte Encoder zu schreiben.

In diesem Fall würde ich nur die wichtigsten Fälle, wie UTF-8 und UTF-16 und AnsiString beachten (und natürlich OOP-mäßig ausbaubar machen, falls ich einmal in ferner Zukunft ein besonders seltsames XML-Dokument bekomme).


Vielen Dank,
Andreas
Andreas N.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#17

Re: Encoding/Unicode/Zeichensätze

  Alt 27. Jan 2007, 19:13
Hallo Andreas,

vielleicht machst du dir zu viele Gedanken. Die Väter von XML haben es so eingerichtet, dass jeder Parser anhand der ersten Zeichen eines Dokuments schnell erkennen kann welches encoding vorliegt. Zuerst wird das Byte-Order-Mark geprüft. Bei Abwesenheit werden die für UTF-16 typischen zero values gesucht. Fehlen diese, dann liegt kein double-byte encoding vor. Jetzt kann es sich nur noch um UTF-8 (multi-byte) oder ein single-byte encoding aus der CodePage-Ära handeln. Durch die genaue Festlegung des Aufbaus der XML-Declaration im Standard ist sichergestellt, dass man problemlos das "encoding Attribut" auswerten kann. Für XML-Dokumente ist die encoding Angabe verpflichtend, wenn es sich nicht um UTF-8 oder UTF-16 handelt. Parser sind aber nicht verpflichtet andere encodings als UTF-8 und UTF-16 zu verstehen. Alleine über diese beiden ist die Interoperabilität sicher gestellt.

Freundliche Grüße
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#18

Re: Encoding/Unicode/Zeichensätze

  Alt 29. Jan 2007, 19:39
Vielen Dank!

Somit betrachte ich meine Frage als geklärt.

Dankeschön,
Andreas
Andreas N.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#19

Re: Encoding/Unicode/Zeichensätze

  Alt 29. Jan 2007, 22:02
UTF-32 ist trotzdem auch noch möglich - selten, aber möglich. Daher kann man bei fehlenden Zero-High-Bytes von 8 Byte CharSize ausgehen. Man kann es aber wissentlich ignorieren bzw. bei den entsprechenden Informationen darauf hinweisen.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#20

Re: Encoding/Unicode/Zeichensätze

  Alt 30. Jan 2007, 08:26
Hallo Thomas,

einigen wir uns mal darauf, dass es UTF-32 gibt, aber der aktuelle Standard XML 1.1 es noch aus guten Gründen ignoriert. Kein W3C-konformer XML-Parser muss UTF-32 verarbeiten können.

Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 16:42 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