如何选择 UNICODE 或 ANSI
在项目配置里面,左面选择 C++ (Shared Options)
如果需要修改,这个选项建议在这个项目的所有配置上修改,所以右面的上面位置,选择 All configuration – All platforms
_TCHAR maps to:选择 wchar_t 为 UNICODE 版本,选择 char 为 ANSI 版本。
图形界面为什么要选择 UNICODE 版本
在图形界面,建议选择 wchar_t,即 UNICODE 版本,在 C++ Builder 10 这个版本,图形界面默认的,会选择 wchar_t,早期版本有默认为 char 即 ANSI 版本的。
这里的切换 UNICODE 版本和 ANSI 版本,影响内容包括:
• 程序的入口函数,即 _tWinMain对应于 wWinMain 还是 WinMain
• 所有的 API 函数,会选择 UNICODE 版本还是 ANSI 版本
选择 UNICODE 的理由:
• 从 C++ Builder 2009 开始,图形界面,包括 VCL 和 Firemonkey 项目,所有窗口或控件的文字相关的属性,都是 UnicodeString 类型的,即使是选择了 ANSI 版本,这些属性也是 UnicodeString 类型的,这样会在 ANSI 版本上,控件属性和 API 函数不对应,需要在程序里面来回转编码,非常麻烦。
• 从 Windows 2000 开始,操作系统的内核的编码都是 UNICODE 了,保留了ANSI 版本,是为了兼容更老的程序,ANSI 版本程序运行时,会实时的进行编码转换到 UNICODE 上运行,编码的转换可以到控制面板的区域和语言里面,在“非UNICODE程序使用的编码”选项,就是 ANSI 版本的程序,按照什么语言去转换编码的。Windows 2000 开始,操作系统的控制面板里面都有这个选项。
• UNICODE是新的编码,这样的程序会是国际化的,在任何语言的操作系统上运行都不会乱码,就算是不编国际化程序,也会让代码看起来很时尚,与时俱进。
控制台程序选择 UNICODE 还是 ANSI
• 选择 UNICODE的理由:文件处理,和其他程序之间的交互和通讯处理等,UNICODE已经是大势所趋了,比如 xml 文件,网页文件,网络通讯,数据库,都是 UNICODE了。
• 选择 ANSI 的理由:由于目前的 Windows 控制台,标准输入输出都不支持 UNICODE,虽然 C/C++ 的 stdio.h 或 iostream 提供的函数都有 UNICODE 版本的,但是在控制台输出的时候,都是转成 ANSI 输出的,不支持本地之外的其他语言,不支持国际化。UNICODE 版本的控制台程序输出汉字都需要设定转为 ANSI 时要转成的编码类型,否则会乱码。
结论:如果正式发行软件,控制台程序仍然建议选择 UNICODE 版本,因为程序不仅仅是显示输出,其他的地方都需要 UNICODE,习惯了就好了。
|