system.text.encoding utf 8.utf8 有空格么

【求助】请指教 System.Text.Encoding.UTF8.GetString转码
[问题点数:20分,结帖人sunboywo]
【求助】请指教 System.Text.Encoding.UTF8.GetString转码
[问题点数:20分,结帖人sunboywo]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。“System.Text.Encoding”并不包含“Default”的定义
[问题点数:40分,结帖人boigel]
“System.Text.Encoding”并不包含“Default”的定义
[问题点数:40分,结帖人boigel]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2012年 总版技术专家分年内排行榜第一
2013年 总版技术专家分年内排行榜第七2011年 总版技术专家分年内排行榜第五2009年 总版技术专家分年内排行榜第九
2012年3月 总版技术专家分月排行榜第一
2013年7月 荣获微软MVP称号
本帖子已过去太久远了,不再提供回复功能。今天在园子首页看到一篇博文-,从中知道了UTF-8是Unicode的一种实现方式:
Unicode只是给这世界上每个字符规定了一个统一的二进制编号,并没有规定程序该如何去存储和解析。
可以说UTF-8是Unicode实现方式之一...
在闪存中记录这个收获时,在回复中提了一个很好的问题:“那么在选择编码方式的时候为什么unicode和utf8会是分别的两个选项呢?”
在C#中,System.Text.Encoding.Unicode与System.Text.Encoding.UTF8分别是2种编码方式。如果UTF-8是Unicode的一种实现方式,那C#中为什么将Encoding.Unicode作为与UTF8并列的一种编码方式呢?
后来在stackoverflow上找到了:
Windows handles so-called &Unicode& strings as UTF-16 strings, while most UNIXes default to UTF-8 these days.&
原来Windows默认的Unicode实现是UTF-16,所以C#中Encoding.Unicode就是UTF-16。
System.Text.Encoding.Unicode的注释也证明了这一点:
// Summary:
Gets an encoding for the UTF-16 format using the little endian byte order.
// Returns:
An encoding for the UTF-16 format using the little endian byte order.
public static Encoding Unicode { get; }
C#中,Encoding.Unicode =&UTF-16 。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:28124次
排名:千里之外
转载:258篇
(11)(12)(2)(24)(11)(54)(28)(22)(22)(56)(25)using&Susing&System.Collections.Gusing&System.Gnamespace&Encoding{&&&&internal&class&Program&&&&{&&&&&&&&private&static&void&Main(string[]&args)&&&&&&&&{&&&&&&&&&&&&var&gb1&=&System.Text.Encoding.GetEncoding("Unicode");&&&&&&&&&&&&Console.WriteLine(gb1.GetString(gb1.GetBytes("测试")));&&&&&&&&&&&&var&gb0&=&System.Text.Encoding.GetEncoding("UTF-8");&&&&&&&&&&&&Console.WriteLine(gb0.GetString(gb0.GetBytes("测试")));&&&&&&&&&&&&var&gb&=&System.Text.Encoding.GetEncoding("GB2312");&&&&&&&&&&&&Console.WriteLine(gb.GetString(gb.GetBytes("测试")));&&&&&&&&&&&&#region&测试代码&&&&&&&&&&&&Console.WriteLine(IsChineseLetter("测试",&0));&&&&&&&&&&&&Console.WriteLine(ChineseLetterCode("测试",&0));&&&&&&&&&&&&Console.WriteLine(ChineseLetterFromCode(ChineseLetterCode("测试",&0)));&&&&&&&&&&&&Console.WriteLine(gb1.GetString(&&&&&&&&&&&&&&&&Utf8_2_Unicode(gb0.GetBytes("测试test"))));&&&&&&&&&&&&//http://qkzz.net/article/3dae-4b50-9ae9-45dc6dd26141.htm&&&&&&&&&&&&//http://topic.csdn.net/u//1907627e-ce38-4ae5-9a4ed1a.html&&&&&&&&&&&&//一级汉字有&3755&个,&40&*&94=3760&个,&其中&d7fe,&d7fd,&d7fc,&d7fb,&d7fa&五位置为空&&&&&&&&&&&&for&(byte&i&=&0xb0;&i&&&0xd8;&i++)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&for&(byte&j&=&0xa1;&j&&&(i&!=&0xd7&?&0xff&:&0xfa);&j++)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&Console.Write(gb.GetString(new[]&{i,&j}));&&&&&&&&&&&&&&&&&&&&if&(j&==&0xc7&||&j&==&0xee&||&j&==&(i&!=&0xd7&?&0xfe&:&0xf9))&&&&&&&&&&&&&&&&&&&&&&&&Console.WriteLine();&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&&&&&Console.WriteLine(GetChineseLetterFromGb2312(0));&&&&&&&&&&&&Console.WriteLine(GetChineseLetterFromGb2312(3754));&&&&&&&&&&&&//汉字的&Unicode&编码范围&&&&&&&&&&&&for&(var&i&=&19968;&i&&=&40959;&i++)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&Console.Write(ChineseLetterFromCode(i));&&&&&&&&&&&&}&&&&&&&&&&&&#endregion&&&&&&&&&&&&Console.Read();&&&&&&&&}&&&&&&&&public&static&string&GetChineseLetterFromGb2312(int&rNum)&&&&&&&&{&&&&&&&&&&&&if&(rNum&&&0&||&rNum&&&3754)&&&&&&&&&&&&&&&&throw&new&ArgumentOutOfRangeException("rNum",&"超出一级汉字的范围!");&&&&&&&&&&&&var&gb&=&System.Text.Encoding.GetEncoding("GB2312");&&&&&&&&&&&&return&gb.GetString(new[]&{(byte)&(0xb0&+&(rNum/94)),&(byte)&(0xa1&+&(rNum%94))});&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&UTF8&汉字字节流转成&Unicode&汉字字节流&&&&&&&&///&&/summary&&&&&&&&&///&&param&name="input"&&/param&&&&&&&&&///&&see&cref="/hyqsoft/blog/item/d4.html"/&&&&&&&&&public&static&byte[]&Utf8_2_Unicode(byte[]&input)&&&&&&&&{&&&&&&&&&&&&var&ret&=&new&List&byte&();&&&&&&&&&&&&for&(var&i&=&0;&i&&&input.L&i++)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&if&(input[i]&&=&240)&//&11110xxx&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&//i&+=&3;&&&&&&&&&&&&&&&&&&&&throw&new&Exception("四字节的&UTF-8&字符不能转换成两字节的&Unicode&字符!");&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&//else&if&(input[i]&&=&224)&&&&&&&&&&&&&&&&if&(input[i]&&=&224)&//&1110xxxx&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&ret.Add((byte)&((input[i&+&2]&&&63)&|&((input[i&+&1]&&&3)&&&&6)));&&&&&&&&&&&&&&&&&&&&ret.Add((byte)&((input[i]&&&&4)&|&((input[i&+&1]&&&60)&&&&2)));&&&&&&&&&&&&&&&&&&&&i&+=&2;&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&else&if&(input[i]&&=&192)&//&110xxxxx&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&ret.Add((byte)&((input[i&+&1]&&&63)&|&((input[i]&&&3)&&&&6)));&&&&&&&&&&&&&&&&&&&&ret.Add((byte)&((input[i]&&&28)&&&&2));&&&&&&&&&&&&&&&&&&&&i&+=&1;&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&ret.Add(input[i]);&&&&&&&&&&&&&&&&&&&&ret.Add(0);&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&&&&&return&ret.ToArray();&&&&&&&&}&&&&&&&&#region&汉字与Unicode编码&&&&&&&&public&static&bool&IsChineseLetter(string&input,&int&index)&&&&&&&&{&&&&&&&&&&&&var&chfrom&=&Convert.ToInt32("4e00",&16);&//范围(0x4e00~0x9fff)转换成int(chfrom~chend)&&&&&&&&&&&&var&chend&=&Convert.ToInt32("9fa5",&16);&&&&&&&&&&&&if&(input&!=&"")&&&&&&&&&&&&{&&&&&&&&&&&&&&&&//var&code&=&Char.ConvertToUtf32(input,&index);&&&&&&&&&&&&&&&&var&gb&=&System.Text.Encoding.GetEncoding("Unicode");&&&&&&&&&&&&&&&&var&b&=&gb.GetBytes(input.Substring(index,&1));&&&&&&&&&&&&&&&&var&code&=&b[0]&+&b[1]*0x100;&&&&&&&&&&&&&&&&return&code&&=&chfrom&&&&code&&=&&&&&&&&&&&&&}&&&&&&&&&&&&return&false;&&&&&&&&}&&&&&&&&public&static&int&ChineseLetterCode(string&input,&int&index)&&&&&&&&{&&&&&&&&&&&&var&chfrom&=&Convert.ToInt32("4e00",&16);&//范围(0x4e00~0x9fff)转换成int(chfrom~chend)&&&&&&&&&&&&var&chend&=&Convert.ToInt32("9fa5",&16);&&&&&&&&&&&&if&(input&!=&"")&&&&&&&&&&&&{&&&&&&&&&&&&&&&&var&code&=&Char.ConvertToUtf32(input,&index);&&&&&&&&&&&&&&&&return&code&&=&chfrom&&&&code&&=&chend&?&code&:&0;&&&&&&&&&&&&}&&&&&&&&&&&&return&0;&&&&&&&&}&&&&&&&&public&static&string&ChineseLetterHexCode(string&input,&int&index)&&&&&&&&{&&&&&&&&&&&&var&code&=&ChineseLetterCode(input,&index);&&&&&&&&&&&&return&code&!=&0&?&code.ToString("X4")&:&string.E&&&&&&&&}&&&&&&&&public&static&string&ChineseLetterFromCode(int&code)&&&&&&&&{&&&&&&&&&&&&var&chfrom&=&Convert.ToInt32("4e00",&16);&//范围(0x4e00~0x9fff)转换成int(chfrom~chend)&&&&&&&&&&&&var&chend&=&Convert.ToInt32("9fa5",&16);&&&&&&&&&&&&//return&code&&=&chfrom&&&&code&&=&chend&?&Char.ConvertFromUtf32(code)&:&string.E&&&&&&&&&&&&if&(code&&=&chfrom&&&&code&&=&chend)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&var&gb&=&System.Text.Encoding.GetEncoding("Unicode");&&&&&&&&&&&&&&&&var&b&=&new[]&{(byte)&(code%0x100),&(byte)&(code/0x100)};&&&&&&&&&&&&&&&&return&gb.GetString(b);&&&&&&&&&&&&}&&&&&&&&&&&&return&string.E&&&&&&&&}&&&&&&&&public&static&string&ChineseLetterFromHexCode(string&hexCode)&&&&&&&&{&&&&&&&&&&&&//var&code&=&Convert.ToInt32(hexCode,&16);&&&&&&&&&&&&var&code&=&int.Parse(hexCode,&NumberStyles.HexNumber);&&&&&&&&&&&&return&ChineseLetterFromCode(code);&&&&&&&&}&&&&&&&&#endregion&&&&}}包含了处理汉字与Unicode编码转换的多种方法,从UTF-8字节流得到Unicode字节流的方法(从而可以用 Unicode编码处理方法处理UTF-8编码)。研究GB2312编码规范,得到最简单的根据一个整数得到一个一级汉字的方法,根据这个方法可以写出最简单生成一级汉字验证码程序~

我要回帖

更多关于 system.text.encoding 的文章

 

随机推荐