在进行WINDOWS编程的时候,需要学习的第一个知识点就是字符编码。因为最开始的windows使用的是ASCII码。在科技的不断应用中,人们发现ASCII码不够使用,然后就发展了很多编码如扩展ASCII,GB2312,GBK,Unicode等等。对于ASCII,GB2312,GBK码的关系,我们只需要知道一点这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。就是说如果一个字是ASCII进行编码的,你传递给一个能解析GBK编码的程序是不会出现乱码的。还有一点我们需要知道的是Unicode编码有很多种,那windows使用是那一种。在MSDN上,我找到了如下描述:
These functions use UTF-16 (wide character) encoding, which is themost common encoding of Unicode and the one used for native Unicode encoding onWindows operating systems.
就是说UTF-16是windows操作系统现在推荐使用的编码。在我们使用VS建立一个工程时,默认的编码是Unicode,windows采用的也就是UTF-16。关于编码方面更多的内容可以参考:
http://msdn.microsoft.com/en-us/library/dd317743(v=VS.85).aspx也可以自己Google。
现在我们的重点是如何实现ASCII码(扩展ASCII)与UTF-16的转换。参考MSDN字符转换相关函数页面:http://msdn.microsoft.com/en-us/library/dd374085(v=VS.85).aspx
An application can usethe MultiByteToWideChar and WideCharToMultiByte functions to convert between strings based on code pages andUnicode strings. Although their names refer to "MultiByte", thesefunctions work equally well with single-byte character set (SBCS),
double-byte character set (DBCS), and multibytecharacter set (MBCS) code pages.
这里SBCS = ASCII,DBCS = 扩展ASCII。这下好了我把这里面常用的概念都说清楚了。总结来说四点:
1. ASCII,GB2312,GBK是向下兼容
2. SBCS=ASCII,DBCS=扩展ASCII
3. Windows使用的Unicode是UTF-16
4. MultiByte指的是ASCII,扩展ASCII,WideChar指的是UTF-16
后续要做的就是利用前面提到的两个函数进行转换了。这个网上很多,看MSDN也就知道了,再不行看《Windows核心编程》也说了的。