c++原生的unicode支持

本文探讨了在C++中处理Unicode编码时遇到的问题及其解决方案。通过使用wchar_t类型来存储Unicode编码值,解决了编码转换错误,确保了字体轮廓提取的正确性。同时强调了使用内建数据类型和相关宏来避免字符串处理中的潜在问题。

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

c++原生的unicode支持

记一次字体轮廓提取遇到的问题

  • 起因
  • 解决
  • 浅谈字符串周边

起因

在做一个激光打标系统,里面不可避免的要用到图形矢量化的问题,于是就是用freetype2 lib提取字体轮廓数学模型,基本步骤是:

Created with Raphaël 2.1.2开始获取字符对应的UNICODE编码值查找编码值对应字库的信息下一步处理

较为重要的一步就是找到字符对应的编码值,在开始的试验中,代码非常粗暴,比如:

int fontChar ='J';

这样的代码是木有运行错误的,但当我

int fontChar ='及';

就出事了,得到的返回值是一个210556。后续的工作也全部发生错误

解决

查阅了相关资料,得知unicode编码是一种双字节(16位)的编码,比如字符’A’对应的ascii码为65,将65转换为16进制的16位数,0x0041,所以我们需要一个恰好为16位的数据结构来存储unicode码,int没有确定的位长,而且由于编译器的优化,显然不能得到正确的编码值。
幸运的是,c++内建数据类型中包含 wchar_t用于专门定义unicode编码值

wchar_t fontChar = '及';
qDebug() << fontChar <<"jjjjjjjjjjjjjjjjjjjjjjjjj";

输出是:
>

36746 jjjjjjjjjjjjjjjjjjjjjjjjj
我们这是看看’及’的unicode码是多少,随便百度一个unicode在线转换,结果是\u53ca,换算成十进制是21450(十进制),和我们的输出结果不一样!但是后续的步骤却又表明我们获得的这个fontChar的值能正常工作,我想这可能与qDebug()的实现有关。但这样让人看起来不舒服!

wchar_t fontChar = L'及';
qDebug() << fontChar <<"jjjjjjjjjjjjjjjjjjjjjjjjj";

输出是:
>

21450 jjjjjjjjjjjjjjjjjjjjjjjjj
这下输出也正常了。

结论:当需要编码值时,请使用wchar_t fontChar =L’及’;

浅谈字符串周边

由于各种标准及各种编译器甚至不同的系统和语言设置均会对我们的字符(串)编码造成影响,使用内建数据类型和相关宏要比我们耍一些技巧更容易避免错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值