Autor Beitrag
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 10.09.10 07:48 
Hallo,

ich bekomme Xml Dateien die als UTF-16 daklariert sind (<?xml version="1.0" encoding="utf-16" ?>).

Diese kann ich weder im IE anzeigen lassen ("Switch from current encoding to specified encoding not supported.") noch mit XDocument laden (XDocument.Load(path..)).

Hat einer eine Idee wie man die dennoch laden kann und was das Problem ist?

Gruß Daniel

PS: Beim schreiben des Textes ist mir noch eine Idee gekommen, das Dokument mit der File Klasse einzulesen und dann zu parsen. Das hat funktioniert (
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
string dealPath = @"c:\PFS_1-135-1_09-09-2010_14-07-50.txt";

            string xmlContent = File.ReadAllText(dealPath);

            var xmlDoc = XDocument.Parse(xmlContent);
). Wäre trotzdem Dankbar wenn einer eine Idee hat warum das Probleme macht und ob man es auch mit XDocument.Load(path + settings) laden könnte.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 10.09.10 10:57 
Eine Beispiel-Datei wäre schön :) . Als Little-Endian mit korrektem BOM kann ich das nicht nachstellen.

_________________
>λ=
danielf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 10.09.10 11:45 
Ich habe eine Testdatei angelegt mit folgendem Inhalt:
ausblenden XML-Daten
1:
2:
3:
<?xml version="1.0" encoding="utf-16" ?>
<STPMessage>
</STPMessage>


und sie versucht mit folgendem Code zu laden:
ausblenden C#-Quelltext
1:
var doc = XDocument.Load(@"C:\test2.xml");					


was zur folgenden Exception führt:
ausblenden Quelltext
1:
2:
XmlException wurde nicht behandelt.
Keine Unicodebyte-Reihenfolgemarkierung. Es kann nicht zu Unicode gewechselt werden.


InnerException gibt es keine.

Gruß

PS: System ist Win Server 2003, .NET Framework 4.0 ist installiert, Solution läuft auf 3.5
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 10.09.10 13:41 
Uh, von einem Zitat kann ich leider weder Encoding noch BOM ablesen :) . Die Fehlermeldung hört sich nach UTF-16 (LE?) ohne BOM an, das ist aber wirklich keine gute Idee:
en.wikipedia.org/wiki/UTF16 hat folgendes geschrieben:
The UTF-16 BOM is optional and big-endian should be used if it is missing, but omitting it is not recommended (most Windows software will assume little-endian). The BOM is not optional in UCS-2.

So eine Datei erkennen sowohl VS als auch File.ReadAllText bei mir als UTF8, es kommt also nichts wirklich Sinnvolles dabei heraus.

_________________
>λ=

Für diesen Beitrag haben gedankt: danielf
danielf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 10.09.10 14:00 
Hmm, wahrscheinlich ist dann genau der Fehlende BOM das Problem. Leider kann ich bei den erzeugten Dateien nichts ändern und da es über einlesen und parsen funktioniert werden ich es dabei belassen.

Dennoch weiß ich nun wieder mehr :D

Danke
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 10.09.10 14:21 
Wenn dir das Encoding bekannt ist, kannst du es als Fallback eintragen:
ausblenden C#-Quelltext
1:
XDocument.Load(new StreamReader(..., Encoding.Unicode))					

Zitat:
It automatically recognizes UTF-8, little-endian Unicode, and big-endian Unicode text if the file starts with the appropriate byte order marks. Otherwise, the user-provided encoding is used.

_________________
>λ=