关于字符编码的理解(1)

关于字符编码的理解(1)

http://www.cnblogs.com/ufo0303/archive/2008/05/30/480541.html

上面BLOG我看了两天才稍微拨开了点关于编码秘团,非常感谢作者,这里就这对此理解和大家分亨一下,也加上了我的理解。

     先看一下这段代码:

//UNICODE编码 (在.net里字符串是Unicode型的) string str = "中文123"; Console.WriteLine(str.Length);//长度为5 //字符串与字节串之间相互转换 //(得到GB2312编码类) Encoding gb = Encoding.GetEncoding("gb2312"); //(按照GB2312的方式对Unicode字符串进行编码并把数据放在字节数组中) byte[] bytes = gb.GetBytes(str);//从字节按照GB2312得到字符数量 //字节流中存是GB2312编码,这里转换成Unicode编码并存放在char数组中 char[] chars = gb.GetChars(bytes);//从字节按照GB2312得到UNICODE字符串

//bytes里放是按字节存放的GB2312,这里把它转换成Unicode了 str = gb.GetString(bytes);

//要将string按照某种编码写入文本文件,有两种方法 //第一种:用Stream类写入已经按照指定编码转化好的字节串 StreamWriter sw = new StreamWriter("1.txt");//9字节: sw.Write(chars); sw.Close();

//第二种方法:构造指定编码的Writer来写入字符串 //这里有一个转换,把Unicode转换成GB2312了,编码后写入文件 StreamWriter sw2 = new StreamWriter("2.txt", false, gb); //7字节 sw2.Write(str); sw2.Close();

//总结一下: //Encoding.GetEncoding("UTF-8").GetBytes() //对传进去参数按照某种编码规则进行编码 //Encoding.GetEncoding("UTF-8").GetString() //对传进去的参数进行解码,我理解也就是转换成Unicode //Encoding.GetEncoding("UTF-8").GetChars()  //与第二个功能相同,只不过是反回值的类型不同

 

再看一个转换例子

       //编码之间的转换

        string unicodeStr = "this is a room";

       //创建不同编码

        Encoding ascii = Encoding.ASCII;

        Encoding unicode = Encoding.Unicode;

       //从一种编码转换成另外一种编码

        byte[] unicodeBytes = unicode.GetBytes(unicodeStr);

        byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);        //下面显示一下转换后byte数组里的值        for (int i = 0; i < unicodeBytes.Length; i++)         {

         Console.WriteLine(unicodeBytes[i].ToString());         }         Console.WriteLine("-----------------------------");        for (int i = 0; i < asciiBytes.Length; i++)         {

        Console.WriteLine(asciiBytes[i].ToString());          }

     //转换成字符串      //定义一个数组,      //getCharCount会返回解码后的字符的字数(解码也就是转换成Unicode),这个个数和未解码     //前的不同,就如下面显示的那样      char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];

     //将ASCII字序列解码成Unicode字符      ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);     //将Unicode字符构造一个Unicode的字符串      string asciiStr = new string(asciiChars);

     Console.WriteLine("Original:{0}", unicodeStr);      Console.WriteLine("ASCII Coverted string:{0}", asciiStr);

转换前数组里编码值

116 0 104 0 105 0 115 0 32 0 105 0 115 0 32 0 97 0 32 0 114 0 111 0 111 0 109 0

转换后的编码值 ---- 116 104 105 115 32 105 115 32 97 32 114 111 111 109

//总结:

这个转换的例子主要体现两个byte数组的不同里。我觉得第二个例子的粉色字体的部分,可以用ascii.getString(byte[])代替。

(作者写的的我还没完全理解全,剩下的几点,稍后再写)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值