关于Unicode的一点说明,欢迎大家补充。如果能对那位有点帮助,我很Happy了。
曾经对于unicode困惑了好长时间,现在又有人向我问这个问题。我自己尝试着把Unicode的一点说明翻译了一下。实在是个不好玩的事情。所以可能仅仅是一个引子,欢迎大家补充。
如果能对那位有点帮助,我很Happy了。
一个“宽字符”是一个两个字节的多语言字符编码。所有应用在当今世界上的计算的字符,包括技术符号和特殊打印符号。可以用Unicode来作为一个宽字符表示,因为一个宽字符永远代表16位的固定长度,使用宽字符使得国际间的编程简单。
宽字符串可以用wchar_t[]数组类型,指针可以用wchar_t*类型。任何ASCII字符可以通过加一个L预处理符号来作为一个宽字符。例如,L”\0”就是一个宽(16位)终结符。类似,所有ASCII字符串可以通过加一个L预处理符号来被当作宽字符串来处理。
通常,宽字符比多字节字符使用多的内存空间但是处理起来快。而且,在同一时间只有一个本地变量可以被作为多字节编码。
除过数据库类外,MFC结构是支持Unicode的,(ODBC不支持Unicode)。MFC通过使用”portale”宏来支持Unicode,如下所示:
MFC中的portable 数据类型:
没有使用portable 的数据类型 用portable宏来代替的数据类型
Char _TCHAR
char*, LPSTR (Win32 data type) LPTSTR
const char*, LPCSTR (Win32 data type) LPCTSTR
类Cstring 使用_TCHAR作为它的基本数据提供了构造函数和方便转换的操作。大多数针对Unicode字符串的操作可以可以通过对Windows ANSI字符串的的类似操作来完成。但是对于位操作要由8位改为16位。不像对于多字节字符集(MBCS),你不必(也不应该)把一个Unicode字符当成两个独立的字节。
Unicode
类型 字节 字节/字符 操作函数 应用 字符声明 编译选项 头文件
ANSI 单字节 1 strcpy Win98,Win2000 char string.h
UNICODE 宽字节 2 wcscpy Win2000,COM,CE WCHAR,wchar_t UNICODE(Windows) _UNICODE(ANSI C) wchar.h
DBCS 双字节 1 or 2 CharNext
通用处理 _tcscpy TCHAR tchar.h