Monday, April 25, 2011

File encoding when reading a file with StreamReader

I am now having an issue where Celsius symbol gets read as C instead of °C.

Looks like the encoding the culprit. I tried to do this:

            using (StreamReader sr = new StreamReader(this._inFilePath,System.Text.Encoding.Unicode ,true))

instead of

            using (StreamReader sr = new StreamReader(this._inFilePath))

but I am now getting garbage....does the original file encoding have to match the StreamReader encoding? I am using compact framework 2.0.

I have found this online, but if use this I have read it all into a byte array, detect the end of each line,convert it to Unicode, and then proceed with a program logic. Anyone used this class?

From stackoverflow
  • Yes, you need to specify the correct encoding when you construct your StreamReader. .NET might be able to detect the encoding for you. There are overloads for the StreamReader constructor which take a boolean parameter you can use to request this behavior.

    public StreamReader( string path, bool detectEncodingFromByteOrderMarks)

    gnomixa : So basically, if I want the file to be read in Unicode I have to save it in Unicode first, correct?
    gnomixa : how do I do this???
    Robert Lewis : You need to use an encoding that supports unicode. Normally this is UTF-8 or UTF-16 (which is called "Unicode" in .NET). Be sure not to use ASCII or ANSI (Encoding.Default). You could post another question about saving files, and describe your situation more.


Post a Comment