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,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上提问。
备注: 本文属于gemfield的CivilNet Blog(http://civilnet.cn/gemfield)【Qt乐园】版块;bug提交至gemfield@civilnet.cn;资料发布及讨论区:http://civilnet.cn/qt;转载此文时,请保证包括【备注】在内的文章的完整性。
http://blog.sina.com.cn/s/blog_a401a1ea0101fgxp.html
char和QChar(Unicode的编码与内存里的值还不是一回事)的更多相关文章
- char和QChar(Unicode的编码与内存里的值还不是一回事)
char类型是c/c++中内置的类型,描述了1个字节的内存信息的解析.比如: char gemfield=’g’;那么在由gemfield标记的这块内存的大小就是1个字节,信息就是01100111,8 ...
- 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/ 汉(记住它,以后碰到内存里的数值,就会有敏 ...
随机推荐
- Android——控制UI界面
一.使用XML布局文件控制UI界面 res\layout\activity_main.xml代码如下: <FrameLayout xmlns:android="http://schem ...
- java.util.Scanner应用详解++扫描控制台输入
java.util.Scanner应用详解 java.util.Scanner是Java5的新特征,主要功能是简化文本扫描.这个类最实用的地方表现在获取控制台输入,其他的功能都很鸡肋,尽管Java ...
- python 笔记(一)
1.Python优点 简单,优雅,明确 强大的模块第三方库 易移植 面向对角 可扩展 2.缺点 代码不能加密 执行速度慢 3.变量定义 第一个字母必须是字母表中的大小写,或下划线.不能以数字为开头. ...
- 编译gd-2.0.35.tar.gz时报错:gd_png.c:16:53: error: png.h: No such file or directory
编译gd-2.0.35.tar.gz时报错: gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/local/freetype/include/freetype2 -I/us ...
- ora 32021 设置参数时参数值长度超过255处理办法
alter system set db_file_name_convert='AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA-.' scope=spfi ...
- percent-encode 百分号编码
原文地址:http://www.imkevinyang.com/2009/08/详解javascript中的url编解码.html 摘要 URI(统一资源标识)编解码 为什么需要编码 哪些需要编码 如 ...
- JS代码大全 (都是网上看到 自己整理的)
事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event. ...
- [转]从一行代码里面学点JavaScript
现如今,JavaScript无处不在,因此关于JavaScript的新知识也是层出不穷.JavaScript的特点在于,要学习它的语法入门简简单,但是要精通使用它的方式却是一件不容易的事. 来看看下面 ...
- 第一个 MIC shared_memory 程序
设置Intel编译器的运行环境 在terminal中执行编译器的环境脚本 compilervars.sh: source <install-dir>/bin/compilervars.sh ...
- JDBC链接
//1. MySQL(http://www.mysql.com)mm.mysql-2.0.2-bin.jar Connection con = null; Class.forName( " ...