• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
无忧岛主
实践是检验真理的唯一标准
博客园    首页    新随笔       管理    订阅  订阅
C#.net 中的编码

C#.net 中的编码-Encoding

2007-03-23 作者:龚军勇 同分类文章

description:

在c#中提供了编码类Encoding,它有四种编码方案:

1、ASCIIEncoding
2、UnicodeEncoding
3、UTF7Encoding
4、UTF8Encoding

另外还有我们所熟悉的GB2312编码,但是它不是Encoding类下的显示类。尽管如此我们仍然可以使用,Encoding encoder = Encoding.GetEncoding("gb2312");

各种编码类型不一定是兼容的,尤其是在有中文的情况下。在解码从文件读取字节数据时,这一点有重要的影响。
例如:用unicode编码方案写入的数据不能使用ASCII或UTF-8编码方案正确的解码。这是因为unicode编码使用两个字节表示每个字符,而其他方案不是这样。

1、首先来看一下编码后的字节数组内容
我们写了以下程序进行验证这一点:
对于这段字符串 string str="测试文本 Test Text" 分别通过GB2312和UTF8对其进行编码,得到以下字节数组:
-------------------------------GB2312-----------------
178 226 202 212 206 196 177 190 32 84 101 115 116 32 84 101 120 116

------------------------------UTF8------------------
230 181 139 232 175 149 230 150 135 230 156 172 32 84 101 115 116 32 84 101 120 116
可以看出对于中文两者编码后的字节是不一样的,对于英文和空格的编码是一样的。

2、两种编码方案保存到文本的情况
对于同一段字符串 string str="测试文本 Test Text" 分别通过GB2312和UTF8对其进行编码,然后分别保存为两个文本文件,代码如下:

private void GetUTF8()
{
Encoding encoder=Encoding.UTF8 ;
byte[] buff = new byte[encoder.GetByteCount(str)] ;
int j = encoder.GetBytes(str,0,str.Length,buff,0) ;
this.textBox1.Text += " -------------------------------UTF8------------------ ";

for(int i=0;i<buff.Length;++i)
{
this.textBox1.Text += " "+buff[i];
}
FileStream fs = File.Create(@"E:WinFormWindowsApplication1WindowsApplication1UTF8.txt");
fs.Write(buff,0,buff.Length) ;
fs.Close();
}

打开记事本都可以正常显示中文,接下来在对文本进行读取显示:
A、用GB2312方案读gb2312写入的文本显示正常

FileStream fs = File.OpenRead(@"E:WinFormWindowsApplication1WindowsApplication1GB2312.txt");
byte[] buff = new byte[(int)fs.Length] ;
fs.Read(buff,0,buff.Length);
Encoding encoder = Encoding.GetEncoding("gb2312");
string str1 = encoder.GetString(buff,0,buff.Length);
this.textBox1.Text = "-------------GB2312 Encode---------------- " + str1 +" ";

B、用Gb2312方案读取Utf8编码写入的文本显示如下:
? Test Text
C、用UTF8读取GB2312写入的文本显示如下:
娴????? Test Text
这正是我们经常遇见的乱码,多少情况都是编码方案不对应。

一般来说我们都采用UTF8进行编码,在网络中传输数据都默认这种方式。

 

如果本文引用了你的文章而未注明,请及时联系我。
posted on 2013-12-17 10:53  无忧岛主  阅读(269)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3