ANSI, GB2132, Unicode, UTF-8介绍

ANSI 的"Ascii"编码使用了单字节的1~127值。

 

汉字是使用0xA1到0xFE之间的值,二个字节表示一个汉字。一共可显示汉字个数为(0XFE - 0XA1) * (0XFE - 0XA1) = 8649 。

如果默认非Uncoide的编码是中文简体,即使用GB2132编码。一个英文字符用一个字节,一个汉字用两个字节。

(即在非Uncoide程序中,我们对字符串操作一般都用的GB2132编码。)

 

为了支持多国语言,采用的Unicode编码。 每一个文字(无论是中文、日文、韩文等等)都有固定的编码,一般长度为两个字节。

(注:双字节最多可表示65536个字符,还是不够用。所以最新的Unicode采用变长的字符集。)

Uncoide不光可以显示各国的文字,还能显示各种特殊的字符。

 

数据类型对应:

Unicode编码 =》 w_char 

非Uncoide的GB2132编码 =》 char

注意:有时候为了显示特殊字符(例如"♣"),如果指定为char*,有可能就丢失字符信息,丢失后显示为"?",这个时候必须用w_char。

相应的,对字符串操作,对API的调用都要用对应的双字节函数。

而汉字就不会存在这样的问题,即使使用char(GB2132编码)也可以正常显示。

 

 

两种数据类型转换函数:

WideCharToMultiByte

MultiByteToWideChar

 

ATL的转换函数:

A2W()

W2A()

注意:需要使用USES_CONVERSION

 

.net转换

用的是Encoding类

Encoding gb2312 = Encoding.GetEncoding("GB2312");

byte[] gbkBytes = gb2312 .GetBytes(data);

string str = gb2312.GetString(gbkBytes );

Code Page Identifiers参照: http://msdn.microsoft.com/en-us/library/dd317756(VS.85).aspx

 

UTF-8 是Unicode 的表现形式之一,长度是1-6个字节,第一个字节的高位1的数目指明了这个utf-8的字符使用的byte数目,

在UTF-8编码集中,每个汉字使用3个字符表示。

 

 

 

string   str   =   "\u67e5\u8be2 ";
str   =   Encoding.GetEncoding( "gb2312 ").GetString(Encoding.GetEncoding( "gb2312 ").GetBytes(str));

在net下直接跟踪就可以看到是查询2字,根本就不用编码,你如果从前台输,你在看看编出来的是什么

posted @ 2012-07-11 09:52  ajiaju  阅读(1467)  评论(0编辑  收藏  举报