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?
To force .NET to read the file in as ISO-8859-9, just use one of the many XmlReader.Create overloads, e.g.
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. :-)
Use a
XmlTextReader
instead of aXmlReader
:If you can't ensure that the input file has the right header, you could look at one of the other 11 overloads to the XmlReader.Create method.
Some of these take an
XmlReaderSettings
variable orXmlParserContext
variable, or both. I haven't investigated these, but there is a possibility that setting the appropriate values might help here.There is the XmlReaderSettings.CheckCharacters property - the help for this states:
So setting this to
false
might help. However, the help also states:So further investigation is warranted.
The
XmlTextReader
class (which is what the staticCreate
method is actually returning, sinceXmlReader
is the abstract base class) is designed to automatically detect encoding from the XML file itself - there's no way to set it manually.Simply insure that you include the following XML declaration in the file you are reading: