Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change character encoding of XmlReader

Tags:

I have a simple XmlReader:

XmlReader r = XmlReader.Create(fileName);  while (r.Read()) {     Console.WriteLine(r.Value); } 

The problem is, the Xml file has ISO-8859-9 characters in it, which makes XmlReader throw "Invalid character in the given encoding." exception. I can solve this problem with adding <?xml version="1.0" encoding="ISO-8859-9" ?> line in the beginning but I'd like to solve this in another way in case I can't modify the source file. How can I change the encoding of XmlReader?

like image 945
dstr Avatar asked Jun 07 '09 10:06

dstr


1 Answers

To force .NET to read the file in as ISO-8859-9, just use one of the many XmlReader.Create overloads, e.g.

using(XmlReader r = XmlReader.Create(new StreamReader(fileName, Encoding.GetEncoding("ISO-8859-9")))) {     while(r.Read()) {         Console.WriteLine(r.Value);     } } 

However, that may not work because, IIRC, the W3C XML standard says something about when the XML declaration line has been read, a compliant parser should immediately switch to the encoding specified in the XML declaration regardless of what encoding it was using before. In your case, if the XML file has no XML declaration, the encoding will be UTF-8 and it will still fail. I may be talking nonsense here so try it and see. :-)

like image 63
Christian Hayter Avatar answered Sep 27 '22 19:09

Christian Hayter