简介
如果你编写的程序是针对非英语国家的用户,如中国、日本、东欧和中东地区,那么你一 定要熟悉 UNICODE 字符集。尤其是用 Visual C++/MFC 编写针对上述国家和地区的用户的程 序时,如果你想让自己的应用程序得到更广泛的用户,那么必须考虑代码 UNICODE 的兼容性 ,也就是说它既在 ASCII 模式下运行 ,也能在UNICODE 模式下运行。本文将介绍 UNICODE 的一些基本编程知识,澄清很多人(包括我自己)在这个问题上存在的模糊认识。对于任何 使用 Visual C++ 和/或 MFC 编程的人来说,这篇文章肯定值得一读。
UNICODE到底是什么?
UNICODE 是目前用来解决 ASCII 码 256 个字符限制问题的一种比较流行的解决方案。大 家知道,ASCII 字符集只有256个字符,用 0-255 之间的数字来表示。包括大小写字母、数 字以及少数特殊字符;如标点符号、货币符号等。对于大多数拉丁语言来说,这些字符已经 够用。但是,许多亚洲和东方语言所用的字符远远不止256个字符。有些超过千个。人们为了 突破 ASCII 码字符数的限制,试图用一种简单的方法来针对超过256个字符的语言编写计算 机程序。于是 UNICODE 应运而生。UNICODE 通过用双字节来表示一个字符,从而在更大范围 内将数字代码映射到多种语言的字符集。
Visual C++的解决方案
作为软件开发人员,如何熟练有效地使用 UNICODE 呢?如果你正在用 Visual C++ 编写 程序,UNICODE 兼容性意味着你的程序是否具有国际化特征,也就是说你的应用程序是针对 本地市场还是国际市场。一旦你作出了决定,那么就得在代码中实现具体细节。好在 Visual C++ 提供了很多内建功能来支持 UNICODE,在创建工程时就可以利用 Visual C++ 提供的这 些功能。在产生应用程序框架代码之前,AppWizard 允许开发人员决定是否支持 UNICODE。 Win32 SDK 包含有一些数据类型遵循 UNICODE 编码规则,MFC 以宏的形式提供了将一般文本 转换成 UNICODE 数据类型的途径。开发人员只需要稍微改变一下编写代码的习惯便可以轻松 编写支持 UNICODE 的应用。
字符串
C 程序员一般是用 char 关键字象下面这样来声明一个字符串数组:
char str [100];
象下面这样声明函数原形:
void strcpy( char *out, char *in );
为了将上面的声明改成支持双字节的 UNICODE 字符集,可以用下面的方法:
wchar_t str[100];
或者
void wcscpy( wchar_t *out, wchar_t *in );
此外,微软还提供一种通过预处理指令来实现 UNICODE。每当用 Visual C++ 创建新工程 时,只要确定是否支持另外一种字符集,则 AppWizard 将会在头文件中插入预处理指令。这 些指令告诉编译器程序想要支持何种字符集。这样在使用VC++提供的通用数据类型时,编译 器将用相应的数据类型把通用数据类型替换成所需要支持的字符集。这样很容易将代码重新 编译成支持其它字符集的程序。
为了在 Visual C++ 6.0 中激活 UNICODE 标准,可以这样做:打开工程文件后,从主菜 单中选择“Project | Settings”打开工程设置对话框 => 然后选择 “C/C++”标签 => 在“Preprocessor definitions”编辑框中添 加 UNICODE 或者 _UNICODE 预处理宏指令。如图一所示:
图一 Project Settings 对话框