Windows现在使用Unicode字符,而且是UTF-16编码。UTF-16用2个字节表示一个字符,UTF-8是1个字节表示一个字符,UTF-32是4个字节表示一个字符。UTF-16可以表示世界上大部分的文字,但是还是有些字符表示不完,UTF-16可以使用surrogate(代理),用4个字节表示一个字符,UTF-16在节省空间和简化代码两个目标之间进行了折衷。

 

Visual Studio新建工程,会有使用Unicode 字符串选项。现在鼓励使用Unicode字符串和新的安全的字符串函数。.Net Framework始终使用UTF-16编码,所以在本机代码和托管代码之间传递字符串,使用UTF-16能改进性能和减少内存消耗。

从WindowsNT开始,完全用Unicode构建。Windows很多函数都提供了Ansi和Unicode两种版本,比如MessageBoxA和MessageBoxW,也有很多新的宽字节数字类型比如wchar_t,WCHAR,TCHAR。如果调用Ansi版本的函数,向它传入一个Ansi字符串,那么函数首先把它转换成Unicode,然后把结果传给操作系统。如果要返回一个Ansi字符串,必须把Unicode字符串转换成Ansi字符串。所以不使用Unicode,系统会增加时间和内存上的开销。

 

Unicode提升了应用程序执行的效率,代码执行速度更快,占用内存更少。如果坚持使用Ansi,Windows就被迫分配更多内存,将Ansi字符串转换成Unicode的形式。

 

使用Unicode有利于本地化,只需发布一个dll,就能支持多语言。很容易和COM集成,和.Net集成。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据