char和QChar(Unicode的编码与内存里的值还不是一回事)
char类型是c/c++中内置的类型,描述了1个字节的内存信息的解析。比如:
char gemfield=’g’;
那么在由gemfield标记的这块内存的大小就是1个字节,信息就是01100111,8位。
再比如:
char gemfield=’汉’;
那么由gemfield标记的这块内存的大小依然是1个字节,存储的信息是:0xBA,这是因为在windows系统中,汉字是以gbk编码(ANSI)存储的,“汉”这个字的编码是0xBABA,因为char只有1个字节,所以就把低字节存储过来。
经过gemfield上面的介绍后,你已经理解了char这个内置类型的用法,也就理解了下面语句的输出了:
char gemfield=0×40;
printf(“gemfield’s value is %c”,gemfield);
QChar是Qt处理字符的基本类型,是对unicode字符的封装。QChar使用2个字节的内存,在其内部维护了一个unsigned short 类型的内存(大多数的编译工具也会把它当作unsigned short类型)。使用的是ucs-2标准。
首先,QChar封装一个char类型是相当容易理解的,char类型作为QChar的构造参数时,会被转换为unsigned short,继而可被QChar接管。
其次,QChar封装一个unsigned short类型也是容易理解的,比如:
QChar gemfield=0x6C49;
0x6C49是“汉”字的unicode编码,这样,依据Qt内部使用的unicode表和codec插件,gemfield就可以被成功解析为“汉”这个字。
最后,下面这种情况是QChar不能处理的:
QChar gemfield = ‘汉’;
因为在windows上,“汉”的编码是gbk编码,值为0xBABA,正如gemfield上文提到的那样。这样,由QChar维护的unsigned short内存上的信息是0xBABA,这个值并不是unicode编码(unicode编码值是gemfield上文中提到的0x6C49),所以解析不了。
同理,QChar可以通过unicode()函数返回一个字符的unicode编码。
QChar提供了丰富的函数,来实现一些字符的转换操作和字符的判断操作,关于这些方面的疑问,请参考Qt的文档,或者去http://civilnet.cn/qt上提问。
参考:
https://www.yuque.com/docs/share/41a549e9-258d-405e-b2ed-4d32e3ee5e57
---------------------
作者:冷月醉雪
来源:CSDN
原文:https://blog.csdn.net/lengyuezuixue/article/details/80712909
版权声明:本文为博主原创文章,转载请附上博文链接!
char和QChar(Unicode的编码与内存里的值还不是一回事)的更多相关文章
- char和QChar(Unicode的编码与内存里的值还不是一回事)
char类型是c/c++中内置的类型,描述了1个字节的内存信息的解析.比如: char gemfield=’g’; 那么在由gemfield标记的这块内存的大小就是1个字节,信息就是01100111, ...
- char类型与Unicode的编码
Java的char型是非常独特的,占用两个字节,因为Java中char型采用了Unicode编码. 要理解这个问题,我们必须要理解什么是Unicode. 世界上存在着多种编码方式,同一个二进制数字可以 ...
- 数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)
背景 公司有一个数据处理线,上面的数据经过不同环境处理,然后上线到正式库.其中一个环节需要将数据进行处理然后导入到另外一个库(Sql Server).这个处理的程序是老大用python写的,处理完后进 ...
- 从char到QChar
char类型是c/c++中内置的类型,描述了1个字节的内存信息的解析.比如: char gemfield=’g’; 那么在由gemfield标记的这块内存的大小就是1个字节,信息就是01100111, ...
- Java中Unicode的编码和实现
Unicode的编码和实现 大概来说,Unicode编码系统可分为编码方式和实现方式两个层次. 编码方式 字符是抽象的最小文本单位.它没有固定的形状(可能是一个字形),而且没有值.“A”是一个字符,“ ...
- Ansi,UTF8,Unicode,ASCII编码的差别
近日须要不同的编码,关于上述编码,一直迷迷糊糊,查了些资料,总算大致了解了,以下全是从网上搜来的: 1. ASCII和Ansi编码 字符内码(charcter code)指的是用来代表字符的内 ...
- Python中GBK, UTF-8和Unicode的编码问题
编码问题,一直是使用python2时的一块心病.几乎所有的控制台输入输出.IO操作和HTTP操作都会涉及如下的编码问题: UnicodeDecodeError:‘ascii’codec can’t d ...
- Ansi,UTF8,Unicode,ASCII编码的区别 ---我看完了 明白了很多
来自:http://blog.csdn.net/xiongxiao/article/details/3741731 ------------------------------------------ ...
- 汉字与区位码互转(天天使用Delphi的String存储的是内码,Windows记事本存储的文件也是内码),几个常见汉字的各种编码,utf8与unicode的编码在线查询,附有读书笔记 good
汉=BABA(内码)=-A0A0=2626(区位码)字=D7D6(内码)=-A0A0=5554(区位码) 各种编码查询表:http://bm.kdd.cc/ 汉(记住它,以后碰到内存里的数值,就会有敏 ...
随机推荐
- 非旋 treap 结构体数组版(无指针)详解,有图有真相
非旋 $treap$ (FHQ treap)的简单入门 前置技能 建议在掌握普通 treap 以及 左偏堆(也就是可并堆)食用本blog 原理 以随机数维护平衡,使树高期望为logn级别, FHQ ...
- 非root用户安装java版本
有时候,我们所用的用户并不是root用户,升级java版本,其实是一个非常简单的过程,具体过程如下: 将下载好的tar包进行解压,然后进行配置文件,在命令行敲入 vi ~/.bashrc,在这个文件 ...
- HBuilder只提示html 不提示js
1. 右键行号,点击语法验证器设置 点开Javascript语法验证器 然后修复你js代码中的不规范代码,就会有提示了.
- query string parameters 、 Form Data 、 Request Payload
微信小程序ajax向后台传递参数的时候总是报400错误 然后看了一下network 发现是query string parameters,但是我写的header如下 header:{ "Co ...
- Java设计模式迭代器
定义:提供一种方法,顺序访问一个集合对象中的各个元素,而又不暴露该对象的内部表示. 类型:行为型 适用场景: 访问一个集合对象的内容而无需暴露它的内部表示 为遍历不同的集合结构提供一个统一的接口 优点 ...
- python---哈希算法实现
# coding = utf-8 class Array: def __init__(self, size=32, init=None): self._size = size self._items ...
- Linux基础性笔记
声明:这是我整理的韩顺平老师的课程,仅供自己参考!!! 给自己的一碗汤:学东西要专一(比较难) 第一节 Linux特点总结: 1. 免费的.开源的. 2. 支持多线程(并发).多用户. 3. 安全性比 ...
- js之promise讲解
1 Promise概述 Promise对象是CommonJS工作组提出的一种规范,目的是为异步操作提供统一接口. 那么,什么是Promises? 首先,它是一个对象,也就是说与其他JavaScript ...
- js获取手机信息
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- vue学习:安装及创建项目
1.先安装npm 参考链接:https://www.cnblogs.com/Hao-Killer/p/7235398.html 查看npm版本:在终端输入:npm -v 2.在安装vue # 安装vu ...