摘自:http://www.i18nguy.com/unicode/c-unicode.zh-CN.html
使你的C/C++代码支持Unicode的第一步
- 定义宏 _UNICODE, 如果定义了宏 _MBCS 则取消它的定义(undefine)。
- 在字符串前添加 L 标记或者用 _T宏修饰字符串。
- 使用 Wide 或者 TCHAR 版本的字符串处理函数。
- 确定API中的字符串长度是按字节计数还是按字符个数计数。因为基于字符的显示和打印(与此不同的是,GUI是基于像素的)使用 列数,而不是字节数或者字符个数。
- 在字符串指针相关的计算中使用GetNext格式,因为一个字符可能包含多于一个Unicode字符单元。
- 注意缓冲区的大小以及防止缓冲区溢出。
改变编码方式可能需要增大缓冲区或者限制字符串的最大长度。假设单个字符的大小从1个字节变为4个字节,并且字 符串本来20个字符占用20字节,那么你需要将字符串缓冲区扩大为80字节或者将字符串长度限制为5个字符(字符串缓冲区仍为20字节)。注意缓冲区的扩 大可能被限制到一个最大值(比如65KB)。减少字符串长度到一个固定值可能破坏现有的程序,限制字符串长度到固定值可能是危险的。比如,限制到20字 节,将字符串转化为大写形式就可能导致字符串变长并且超过限制。 - 将接受或者返回单字符参数的函数替换为使用字符串的版本。 (在一些语言中) 对于单个字符的操作可能导致返回多个代码点。例如,upper('ß')将 返回"SS"。
- 使用 wmain 代替 main。 环境变量也由_environ变 为_wenviron 。
wmain(int argc, wchar_t *argv[], wchar_t *envp[]) - MFC Unicode 程序使用 wWinMain 作为程序入口点(VC++ 6.0)。
project->settings->Link,选择output选项卡
在Entry point symbol一行加上 wWinMainCRTStartup 。 - 字体的因素,分清使用的字体用于渲染各种语言的字符还是用于脚本中。