人们一直将文本字符串编码成一组以0结尾的单字节字符,但一个字节最多只能表示256个符号,这不能表示更多的符号,微软为了能为应用程序支持不同的字体,双字节字符集应运而生。
Windows Vista操作系统中,每个Unicode字符都使用UTF-16(16位编码),UTF是Unicode转换格式,UTF-16将每个字符编码为2个字节(或者说16位),全球各地使用的大多数语言中,每个字符很容易用一个16位值来表示。对于那些不能用16位表示的字符时,UTF-支持代理,后者是用32位(四个字节)来表示一个字符的一种形式。在开发Windows应用程序中多用16位编码可以避免一些麻烦,例如需要在本机代码和托管代码之间传递字符或字符串时可以改进性能和减少内存消耗。
Windows核心函数都需要Unicode字符串。调用Windows函数时如果向它传入一个ANSI字符串(由单字节字符组成的一个字符串),那么函数首先会把字符串转换为Unicode,再把结果传给操作系统。如果希望函数返回ANSI字符串,那么操作系统会把Unicode字符串转换为ANSI字符串,再把结果返回给我们的应用程序,这样系统会产生时间和内存上的开销。Windows函数中的ANSI函数也会把字符串转换为Unicode形式,再从内部调用Unicode函数。
C运行库中的函数不同于windows函数,他们都是”自力更生“的.
Unicode的好处:
1.有利于应用程序的本地化
2.提升了应用程序的效率,因为代码执行速度更快,占用内存较少,Windows内部的一切工作都是使用Unicode字符Unicode字符串来进行的,假如我们
坚持传入ANSI字符或字符串,Windows就被迫分配内存,并将ANSI字符或字符串换为等价的Unicode形式。
3.应用程序可以轻松调用所有尚未弃用的Windows函数。
参考书籍:Windows核心编程第五版