简明手册: 使你的C/C++代码支持Unicode

本文介绍了如何使C/C++代码支持Unicode,包括定义_UNICODE宏、使用宽字符字符串及宽字符函数、处理字符串长度和缓冲区大小等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘自: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
  • 字体的因素,分清使用的字体用于渲染各种语言的字符还是用于脚本中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值