c++原生的unicode支持
来源:互联网 发布:mac 管理员账户没有了 编辑:程序博客网 时间:2024/06/05 14:42
c++原生的unicode支持
记一次字体轮廓提取遇到的问题
- 起因
- 解决
- 浅谈字符串周边
起因
在做一个激光打标系统,里面不可避免的要用到图形矢量化的问题,于是就是用freetype2 lib提取字体轮廓数学模型,基本步骤是:
较为重要的一步就是找到字符对应的编码值,在开始的试验中,代码非常粗暴,比如:
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’及’;
浅谈字符串周边
由于各种标准及各种编译器甚至不同的系统和语言设置均会对我们的字符(串)编码造成影响,使用内建数据类型和相关宏要比我们耍一些技巧更容易避免错误。
0 0
- c++原生的unicode支持
- python的unicode支持
- Delphi的Unicode支持
- Python 的Unicode 支持
- Erlang的Unicode支持
- 使你的C/C++代码支持Unicode
- 简明手册: 使你的C/C++代码支持Unicode
- 使你的C/C++代码支持Unicode
- android 原生支持的音频格式
- Powershell原生支持的cURL
- TinyXml对Unicode的支持
- vc6支持UNICODE的问题解决
- PB对Unicode的支持
- erlangR13B对unicode的支持
- Windows对Unicode的支持
- VC6 对UNICODE的支持
- PB对Unicode的支持
- PB对Unicode的支持
- 两原则解答SAT填空题:提高速度和效率
- Java基础——JavaScript概述、DOM
- VMware8下liunx系统CentOS-6.3安装
- 题目1011:最大连续子序列 简单dp
- Oracle高资源消耗SQL语句定位
- c++原生的unicode支持
- 在settimeout方法中传递参数
- CVS使用命令
- 第十三周项目1(3)-动物这样叫
- java获取当前某个时间点
- 搜索引擎——匹配方式
- 情景菜单ContextMenu的创建
- Candy -- leetcode
- CSDN学院系统停站维护