首页 > 代码库 > VS2010与VS2013中的多字节编码与Unicode编码问题

VS2010与VS2013中的多字节编码与Unicode编码问题

1. 多字节字符与单字节字符

  char与wchar_t

  我们知道C++基本数据类型中表示字符的有两种:char、wchar_t。 
  char叫多字节字符,一个char占一个字节,之所以叫多字节字符是因为它表示一个字时可能是一个字节也可能是多个字节。一个英文字符(如’s’)用一个char(一个字节)表示,一个中文汉字(如’中’)用3个char(三个字节)表示。

  wchar_t被称为宽字符,一个wchar_t占2个字节。之所以叫宽字符是因为所有的字都要用两个字节(即一个wchar_t)来表示,不管是英文还是中文。 

  在C++中,一般操作如下:

1. 用常量字符给wchar_t变量赋值时,前面要加L。如: wchar_t wch2 = L’中’; 
2. 用常量字符串给wchar_t数组赋值时,前面要加L。如: wchar_t wstr2[3] = L”中国”; 
3. 如果不加L,对于英文可以正常,但对于非英文(如中文)会出错。

2. 多字节字符串与宽字节字符串

 std::string与std::wstring

  字符数组可以表示一个字符串,但它是一个定长的字符串,我们在使用之前必须知道这个数组的长度。

  为方便字符串的操作,STL为我们定义好了字符串的类string和wstring。大家对string肯定不陌生,但wstring可能就用的少了。

  string是普通的多字节版本,是基于char的,对char数组进行的一种封装。

  wstring是Unicode版本,是基于wchar_t的,对wchar_t数组进行的一种封装。

3.字符集(Charcater Set)与字符编码(Encoding)

字符集(Charcater Set或Charset):是一个系统支持的所有抽象字符的集合,也就是一系列字符的集合。

  字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。

  常见的字符集有:ASCII字符集、GB2312字符集(主要用于处理中文汉字)GBK字符集(主要用于处理中文汉字)、Unicode字符集等。

字符编码(Character Encoding)是一套法则,使用该法则能够对自然语言的字符的一个字符集(如字母表或音节表),与计算机能识别的二进制数字进行配对。即它能在符号集合与数字系统之间建立对应关系,是信息处理的一项基本技术。通常人们用符号集合(一般情况下就是文字)来表达信息,而计算机的信息处理系统则是以二进制的数字来存储和处理信息的。字符编码就是将符号转换为计算机能识别的二进制编码。

一般一个字符集等同于一个编码方式,ANSI体系(ANSI是一种字符代码,为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符)的字符集如ASCII、ISO 8859-1、GB2312、GBK等等都是如此。一般我们说一种编码都是针对某一特定的字符集。 
一个字符集上也可以有多种编码方式,例如UCS字符集(也是Unicode使用的字符集)上有UTF-8、UTF-16、UTF-32等编码方式。

 

 

 

 

endl;

VS2010与VS2013中的多字节编码与Unicode编码问题