ANSI vs SHIFT JIS vs UTF-8 in c#

c#, character-encoding, encoding

Solution

As far as code pages are concerned, "ANSI" (and `Encoding.Default` in .NET) basically just means "the non-Unicode codepage used by this system" - exactly what codepage that is, depends on how the system is configured, but on a Western European system, it's likely to be Windows-1252.

For the system where that text comes from, then "ANSI" would appear to mean Shift-JIS - so unless your system has the same code page, you'll need to tell your code to read the text as Shift-JIS.

Assuming you're reading the file with a StreamReader, there are various constructors that take an Encoding, so just grab a Shift-JIS encoding with `Encoding.GetEncoding("shift_jis")` or `Encoding.GetEncoding(932)` and use it to construct your StreamReader.

Problem

I have been trying to figure the difference for quite sometime now. The issue is with a file that is in ANSI encoding has japanese characters like: `­‚È‚­‚Æ‚à1‚‚ÌINCREMENTs‚ª•K—v‚Å‚·.` It equivalent in shift-jis is `少なくとも1つのINCREMENT行が必要です.` which is expected to be in japanese. I need to display these characters after reading from file(in ANSI) on a webpage. There are some other files in UTF-8 displaying characters right not seeing this. I am finding it difficult to figure out whats the difference and how do I change encoding to do right things here.. I use c# for reading this file and displaying it, I also need to write the string back into file if its modified on web. Any encoding and decoding schemas here?

Original source