首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

Unicode跟字符串处理

2013-03-21 
Unicode和字符串处理我们熟悉的ASCII码全称是美国国家信息交换标准码,它起源于20世纪50年代末,并于1967年

Unicode和字符串处理
      我们熟悉的ASCII码全称是美国国家信息交换标准码,它起源于20世纪50年代末,并于1967年最终定型。ASCIIS码使用7位(bit)的宽度,有26个小写字母,26个大写字母,10个数字,32个符号,33个控制码,一个空格码,共128个代码。
      ASCII的使用相当普及,是一种非常可靠的标准。但是,ASCII是一个真正的美国标准,它甚至满足不了其他英语国家的需求,例如,ASCII码并没有英镑符号。
      我们知道,一些语言文字系统(例如中国的汉字)的字符集有非常多的符号,但一个字节最多只能表示256个符号,这是远远不够的。为了支持这些文字系统,双字节字符集(doube-byte character set, DBCS)应运而生。在双字节字符集中,一个字符由1个或2个字节组成。对程序员来说,和双字节字符集打交道就如同一场噩梦,因为程序员需要判断每个字节是否双字节的前导字节。
      与DBCS的混乱不同,Unicode统一使用16位进行编码,即UTF-16编码。UTF的全称是Unicode Transformation Format。UTF-16将每个字符编码2个字节(16位)。这样一来,应用程序很容易遍历字符串长度。
一、char数据类型      我们知道,C语言用char数据类型来表示一个8位ANSI字符。当在代码中声明一个字符串时,C编译器会把字符串中的字符转换成由8位char数据类型组成的数组。例如,

#ifdef _UNICODE#define _tcslen wcslen#else#define _tcslen strlen#endif
      这样,只需要代码中使用_tcslen,即可以获得字符串的长度。
六、推荐的字符和字符串处理方式1. 将文本字符串想象为字符的数组,而不是char或者字节的数组
2. 使用通用的数据类型(如TCHAR/PTSTR)来表示文本字符和字符串
3. 用明确的数据类型(如BYTE或PBYTE)表未字节,字节指针和数据缓冲区
4. 用TEXT或_T宏来表示字面常字符和字符串,但为了保持一致,请避免混用
5. UNICODE和_UNICODE符号要么同时指定,要不都不指定
6. 避免使用printf系列函数,尤其不要使用%s和%S来进行ANSI与Unicode字符串之间的转换,正确的做法是使用MultiByteToWideChar和WideCharToMultiByte函数
7. 修改有关字符串的计算。例如,函数经常希望传给它的是缓冲区大小的字符数,而不是字节数,这时应使用_countof(szBuffer),而不是sizeof(szBuffer)。如果要为一个字符串分配内存块,那么请记住内存是以字节来分配的。这意味着需使用malloc(nCharacters * sizeof(TCHAR)),而不是调用malloc(nCharacters)。

热点排行