日期:2014-05-18  浏览次数:20854 次

关于汉字编码问题
请看这段代码:
  StreamReader sr = new StreamReader("../../text.txt",Encoding.Default);
  string str = sr.ReadLine();
  MessageBox.Show(str);
  sr.Close();
其中text.txt中存放的是一行汉字。该代码可以成功读出汉字。但如果将Encoding.Default改为Encoding.Utf8,Utf7,Utf32或Unicode等其他编码方式则读出的是乱码。按理说Unicode就支持汉字的编码啊,但为什么是乱码呢?我被这几种编码搞晕了,请高手指点!

------解决方案--------------------
try

StreamReader sr = new StreamReader("../../text.txt",Encoding.GetEncoding("gb2312")); 

看下文件的编方式,保证编码一致就可以正确解码。你使用一种协议编码,然后用另一种协议去解码,当然无法保证数据被正确解码。

另外看下MSDN关于Encoding.Default的说明。系统的当前 ANSI 代码页的编码。不同的系统可能使用不同的编码作为默认编码,因此,从一个系统流入另一个系统的数据可能不会被正确转换。若要确保编码后的字节能够正确解码,请使用带前导码的 Unicode 编码(即 UTF8Encoding、UnicodeEncoding 或 UTF32Encoding)另一选择是使用较高级别的协议以确保使用同一格式进行编码和解码。