.NET – How Does Encoding.Default Work?

c++encodingfilefile-ioio

I'm reading a file using:

var source = File.ReadAllText(path);

and the character © wasn't being loaded correctly.

Then, I changed it to:

var source = File.ReadAllText(path, Encoding.UTF8);

and nothing.

I decided to try using

var source = File.ReadAllText(path, Encoding.Default);

and it worked perfectly.
Then I debugged it and tried to find which Encoding did the trick, and I found that it was UTF-7.

What I want to know is:

Is it recommended to use Encoding.Default, and can it guarantee all the characters of the file will be read without problems?

Best Answer

Encoding.Default will only guarantee that all UTF-7 character sets will be read correctly (google for the whole set). On the other hand, if you try to read a file not encoded with UTF-8 in the UTF-8 mode, you'll get corrupted characters like you did.

For instance if the file is encoded UTF-16 and if you read it in UTF-16 mode, you'll be fine even if the file does not contain a single UTF-16 specific character. It all boils down to the file's encoding.

You'll need to do the save - reopen stuff with the same encoding to be safe from corruptions. Otherwise, try to use UTF-7 as much as you can since it is the most compact yet 'email safe' encoding possible, which is why it is default in most .NET framework setups.

Related Question