首页 > 代码库 > windows核心编程(字符编码)
windows核心编程(字符编码)
一、字符编码
字符集
1)字符集是字符的数字代码集。有ANSI/ASCII、MBCS(Multibytes)、Unicode等。比如“汉”字Unicode代码为0x6c49。
编码方案
2)编码方案是记录字符代码的方式。有UTF-8、UTF-16、GB2312等。编码方案分“变长编码”与“定长编码”两种。UTF-8是变长编码(汉字有的两字节有的三字节),而UTF-16是两字节定长的编码。
字符集与编码方案
3)字符集与编码方案是配套的。如GB2312编码,即是GB2312字符集与GB2312编码方案。此处GB2312为两字节定长编码。而提到的Unicode编码,即指Unicode字符集与UTF-X编码方案。其中UTF-16为两字节定长编码,UTF-8设计为变长是为了应用中兼容已有的ANSI/ASCII编码,并广泛应用于互联网业务。
Multibytes与Unicode
1)vc下,或者win32中,两者之别等价于变长与定长编码之分,或者说是采用非UTF-16还是UTF-16之分。
2)从winNT内核以来,win OS已全面更新为UTF-16编码。
3)此处Unicode仅指Unicode字符集配UTF-16编码。其余,UTF-8、UTF-7、GB2312、ANSI/ASCII等一律划归Multibytes。故而Multibytes应理解为“变长”字符,而非“多”字符。
VS工程应用
工程属性设置字符集为Multibytes或Unicode。这是用来切换winapi版本的,是用Ansi或Unicode版本。
二、ANSI字符和UNICODE字符与字符串数据类型
1)在C中char类型表示一个8位ANSI字符。
如下表示:
char c = ‘A‘;//即在内存中占用一个字节的空间
2)wchar_t表示一个16位的Unicode(UTF-16)字符。
wchar_t c = L‘A‘;//在内存中占用两个字节的空间