规范化的C++编程方法备忘录 本地化相关[写中文版软件必看](2)

-从字符串中取字符:
对于ASCIIUNICODE(1),方法比较简单,直接用相应的类型变量赋值即可:
char c = *pszAscii;
wchar_t cw = *pswzUncd;
对于多字节
规定每个字符最多为5个字节,因此用一个64位整数表示。然后附上一个长度值。将你要拣出的字符,从首字符开始拣出5个字节。然后调用一次strinc或CharNextEx等。如果得到的结果小于5个字节,就把多余的舍弃,或者放入下一个缓存(如果你还要继续拣出下一个的话)。注意这种方法适用于你无法直接取得整串句子的情况(比如一个很长的文章,存放于文件中)。
如果你能直接访问到字符串就简单多了,参照前文的例子。
对于不等长的宽字符版本(很多常用于浏览器中),方法类似。

3.字符和字符串的显示(适用于写文本显示程序、字符串显示的定位)

考虑到这里只是讨论C++,就简要地说一下:

  -当前系统对多字节和ascii显示的处理是不同的。这里要强调的是,如果多字节编码的某一个字符由多个字节组成,直接显示该字符和逐个的分别显示其中的每一个字节结果一般是不同的。因此你必须首先确定到底是acsii-oem字串,还是多字节(例如含有中文的中文文本),两者不可混合(即一行文本不可能既有acsii-oem字符又有多字节字符)!然后,如果是acsii-oem,就求出每个字符(字节)的宽和高,再按需求计算显示区域,最后在所得区域中逐个显示出字符(字节)就可以了;如果是多字节,就先得到每个字符的字节分组,再求出对应分组代表的字符的宽和高,再按需求计算显示区域,最后在所得区域中逐分组地显示出字符就可以了。

  -由于显示函数在用户程序和图形驱动之间穿越,可能开销会比较大。因此应该尽量整句,而不是逐个的绘制出字符来。不过象在windows这类对acsii-oem到多字节的区分比较模糊(因为历史的原因),当你要显示acsii-oem编码文本时,应该逐字节地计算、显示,这是因为在非纯英文系统下,显示字符串的函数会不管三七二十一自动给你多字节方式显示(即使调设置环境api也没用);而要显示多字节编码时尽量整句传入函数来求区域及显示字符串,这是因为可以获得更高的性能。然而如果你是多字节文本,在纯英文系统下处理结果就会像acsii-oem一样。这不是你的错,只需要安装对应的语言支持项目(语言包)并作好对应的设置即可正常显示。

 

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏

unituniverse2

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值