Windows核心编程笔记(二)

第2章 Unicode


2.1字符集
        软件的本地化要解决的真正问题,实际上就是如何处理不同的字符集.


2.1.1单字节与双字节字符集
        如果只是调用strlen函数,那么你无法真正了解字符串中究竟有多少函数,它只能告诉你到达结尾的0之前有多少个字节.在C运行期库没有配备相应的函数,使你能够对双字节字符集进行操作,但是在VC里面却有很多函数可以实现,比如:

        _mbslen.


2.1.2 Unicode:宽字节字符集
        Unicode提供了一种简单而又一致的表示字符串的方法.Unicode字符串中的所以字符都是16位的.


2.2为什么使用Unicode
2.3Windows 2000与Unicode

2.4Windows 98与Unicode
        Windows 98像它的前任产品一样,几乎都是使用ANSI字符串来进行所以的内部操作的.


2.5 Windows CE与Unicode
        为了使Windows CE尽量做得小一些,Microsoft公司决定完全不支持ANSI Windows函数.

2.6 需要注意的问题
        windows2000既支持Unicode,也支持ANSI,因此可以位任意一种开发应用程序.
        windows98只支持ANSI.
        windowsCE只支持Unicode.

2.7对COM的简单说明
    COM要求使用Unicode字符串.

2.8如何编写Unicode源代码
2.8.1C运行期间对Unicode的支持
        C头文件String.h做了修改,增加了一个Unicode字符的数据类型是wchar_t.和此对应的Unicode操作函数都有.比如:
        char * strchr(const char*,int);
        wchar_t * wcschr(const wchar_t *,wchar_t);
        其他类似的函数都用.若想建立双重功能的必须包含TChar.h这个文件.如果在编译的时候引用了_UNICODE,这些宏就会使用wcs这组函数.如果没有定义_UNICODE,那么将引用str这组宏.Microsoft公司的C++编译器能够编译的只能是ANSI字符串.不是Unicode字符串.若要生成一个Unicode字符串必须是:
        TCHAR *szError=L"Error";
        现在可以用一个宏来代替这个实现:
        TCHAR *szError=_TEXT("Error");

2.8.2Windows定义的Unicode数据类型
        WCHAR Unicode字符
        PWSTR 指向Unicode字符串的执政
        PCWSTR 指向一个恒定的Unicode字符串指针

2.9成为符合ANSI和Unicode的应用程序
        将文本串视为字符数组,而不是chars数组或字节数组.
        将通用数据类型(TCHAR和PTSTR)用于文本字符和字符串.
        将显示数据类型(BYTE和PBYTE)用于字节,字节指针和数据缓存.
        将TEXT宏用于原义字符和字符串.
        执行全局性替换.
        修改字符串运算的问题.

2.9.1Windows字符串函数
        对Unicode字符串进行操作的函数,主要有lstrcat,lstrcmp,lstrcmpi,lstrcpy,lstrlen.这些宏既可以调用函数的Unicode版本,也可以调用函数的ANSI版本,这就根据编译员代码时是否定义了UNICODE.如果在定义了UNICODE,lstrcat函数将扩展为lstrcatA.如果定义了UNICODE,lstrcat将扩展为lstrcatW.


2.9.2确定文本是ANSI文本还是Unicode文本
        IsTextUnicode函数能够帮组进行这种区分.
        DWORD IsTextUnicode(CONST PVOID pvBuffer,int cb,PINT pResult);
        第一个参数用于标识pvBuffer指向的字节数.第二个参数为大小.第三个参数是个整数,可以指明你要进行哪些测试.也可以为该参数传递NULL.返回值其实是一个BOOL用来反应测试的结果.

2.9.4在Unicode与ANSI之间转换字符串
    MultiByteToWideChar用来将多字节字符串转换成宽字节字符串,WideCharToMultiByte将宽字符串转换成等价的多字节字符串.
   

   
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值