Unicode字符问题

几个知识点:

1.Windows98 只支持ANSI,只能为ANSI开发应用程序。

2.Windows2000及以后既支持Unicode,也支持ANSI,因此可以为任意一种开发应用程序,但是需要明白的是,内核只处理了Unicode,系统在处理ANSI时,需要先转换为Unicode,然后将其传递给操作系统,操作系统处理完后,系统再将Unicode转换成ANSI字符串返回给应用程序。

3.Windows CE只支持Unicode,只能为Unicode开发应用程序。

4.COM组件:所有需要字符串的COM接口方法都只能接受Unicode字符。

5.宏(UNICODE)用于控制在调用操作系统的API时,系统是调用宽字符版本还是窄字符版本;而(_UNICODE)用于控制使用TChar.h创建的ANSI/Unicode通用源代码文件成为采用何种字符集的应用程序。(_UNICODE)用于C运行期头文件,而(UNICODE)则用于Windows头文件。

6.Windows函数一般存在两个版本,假设有一个API:CreateWindowEx,那么它的Unicode版本函数为CreateWindowExW,而ANSI版本函数为CreateWindowExA。

7.Windows系统提供了一组范围很广的字符串操作函数。建议使用,这将稍稍有助于提高应用程序的性能。使用这些函数必须加上ShlWApi.h头文件。

8.使用(LCID GetThreadLocale())来得到该线程的当前语言设置。

9.有一些C运行时函数没有为Unicode提供很好的支持,这时,需要使用Windows提供的字符串函数,例如,转换大小写的CharLower和CharUpper函数等。

10.资源编译器对所有资源进行编译时,输出文件是资源的二进制文件。资源中的字符串值总是Unicode字符串。

11.使用IsTextUnicode来判断一段文本是Unicode还是ANSI,注意该函数采用一系列统计方法和定性方法,以便猜测缓存内容。因此该方法有可能返回不正确的结果。

12.使用MultibyteToWideChar和WideCharToMultibyte来完成宽字符串和多字节字符串之间的等价转换。

我的一点感想:搞应用程序的人可能很少意识到自己的字符集问题,特别是.Net开发,因为.Net里面所有的字符都是Unicode字符(默认),但是在互操作的时候可能要注意指定封送处理时的字符集类型,另外,搞内核驱动开发的人可能与一个名为UNICODE_STRING的结构朝夕相处,它表示一个Unicode字符串,我们利用有限的一些内核函数与这个结构打交道。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值