博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符集及编码
阅读量:7103 次
发布时间:2019-06-28

本文共 1540 字,大约阅读时间需要 5 分钟。

字符集(CharSet)编码不同,数据的存储空间大小也不同,选择不当还会出现乱码等,特别是数据交互的地方,发送与接收应该保持编码一致。

ASCII码是最早最基础的编码,采用7位(bit)表示一个字符,一共可表示2的7次方=128种字符,后来有了Latin1(ISO-8859-1)对ASCII进行了扩充,使用8位(bit)也就是一个字节表示一个字符,可表示2的8次方=256种字符,相比ASCII可以表示更多的特殊字符,但对于一些区域,如中文这样字符远远不够,为了解决这种问题,Unicode编码出现了,旨在能表示所有区域的字符,针对特定的区域还有针对性的编码,如中文的gb2312等。

 

Unicode编码使用两个字节表示一个字符,可表示2的16次方=65536个字符,当一份文档中的字符大多是英文或纯英文时,使用Unicode就显得有点浪费空间。而utf-8编码可以解决此类问题,它遇到英文时使用同ASCII编码,但遇到如中文字符时,一个字符用3个字节来表示。而gb2312遇到中文用2个字节来表示。

 

.NET中的位于System.Text下的Encoding类是各种编码的核心类,提供了字节数组与字符之间的转换,及各种编码间的转换,Encoding类定义如下:

public
abstract
class
 Encoding : ICloneable

 

Encoding类的派生类有ASCIIEncoding,UnicodeEncoding,UTF8Encoding类等,提供不同特定编码的覆写。

 

下面以字符“message,信息”(英文,半角逗号,中文)为例,来看看各编码的表示

 

string
 result 
=
""
;
string
 s 
=
"
message,信息
"
;
byte
[] b 
=
 Encoding.UTF8.GetBytes(s);
//
byte[] b = Encoding.Unicode.GetBytes(s);
//
byte[] b = Encoding.GetEncoding("gb2312").GetBytes(s);
foreach
 (
byte
 i 
in
 b)
{
result 
+=
 i.ToString() 
+
"
,
"
;
}

 

 

result的值为“109,101,115,115,97,103,101,44,228,191,161,230,129,175”

  m e s s a g e ,
utf-8 109 101 115 115 97 103 101 44 228,191,161 230,129,175
unicode 109,0 101,0 115,0 115,0 97,0 103,0 101,0 44,0 225,79 111,96
gb2312 109 101 115 115 97 103 101 44 208,197 207,162

从字节数组到字符的转换

 

byte
[] b 
=
new
byte
[] { 
109
101
115
115
97
103
101
44
228
191
161
230
129
175
 };
string
 s 
=
 Encoding.UTF8.GetString(b);

s的值为“message,信息”。字节数组是utf-8的编码,如果采用gb2312来GetString,则得到的中文字符会是乱码:message,淇℃伅

本文转自chy710博客园博客,原文链接:http://www.cnblogs.com/chy710/archive/2009/12/31/1636625.html
,如需转载请自行联系原作者
你可能感兴趣的文章
NS_ERROR_XPC_NOT_ENOUGH_ARGS: Not enough arguments [nsIDOMWindow.alert]
查看>>
IT技术随笔博客园链接
查看>>
squid
查看>>
Aspose.Cells 8月新版17.8发布 | 附下载
查看>>
php连接mysql速度慢的问题解决
查看>>
2003服务器安全设
查看>>
对centos6下时间同步(ntp)操作的讨论
查看>>
概率论与数理统计(一)古典概型
查看>>
kafka学习:入门
查看>>
Object.assign()的用法
查看>>
什么是次世代游戏
查看>>
矢量图形引擎库VectorDraw Developer Framework 更新至v7.7011.0.4
查看>>
SSH 内网端口转发实战
查看>>
Git 系列(二):初步了解 Git
查看>>
2M宽带多快
查看>>
JS常用正则表达式备忘录
查看>>
Phoenix三贴之二:Phoenix二级索引系统
查看>>
java中servletContextListener、httpSessionListener和servletRequestListener三者概述
查看>>
非本专业就当不了数据分析师?
查看>>
接口 (interface)
查看>>