【Qt学习笔记】6.Qt中的字符、字符串-创新互联

一、字符集

成都创新互联长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为丹棱企业提供专业的网站制作、做网站丹棱网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。

字符集是一个人为的规定,人们先用一个小册子规定好了“文字字符”与“数字”的对应关系。

七种,每一个字符对应的数字,也成为该字符的编码。例如,ASCII码表就是一个字符集, 'A'字符对应的编码是65

ASCII: 0 ~ 127,最高位为0

拉丁字符集:最高位为1

Unicode

Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案

Unicode用数字0 ~ 0x10FFFF来映射这些字符,最多可以容纳1114112个字符

是一个超大的字符集

Unicode有三种编码方案

1、UTF-32编码

每个字符用一个int来表示,简单,但很浪费空间

2、UTF-16编码

用1~2个short来表示一个字符

3、UTF-8编码

用1~4个字节来表示一个字符

Windows默认是GBK编码,Linux默认是UTF-8编码

VC下的转换方法:

VC中,用wchar_t代表宽字符,相当于short型。一个 wchar_t 的数组来存放unicode字符

二、Qt中的字符、字符串

Qt作为一个跨平台的框架,设计之初就考虑了字符的问题;

它封装了一个QString代表字符串,它是UTF-16编码的类,同时封装了一个QChar类代表宽字符;

这时就有一个问题:VS下的编码方式是GBK

因此像下面这样直接将字符串赋值给QString的话:

	QString str = "一段中文";
	ui.lineEdit->setText(str);

运行出来结果就会这样:

【Qt学习笔记】6.Qt中的字符、字符串

因此需要对字符串进行转码:

	QString qstr = QString::fromLocal8Bit("一段中文");

Qt框架提供的转码的方式如下:

//GBK --> QString
QString QString::fromLocal8Bit(const char* str);

//QString --> GBK
QByteArray bytes = text.toLocal8bit();

//UTF-8 --> QString
QString QString::fromUtf8(const char* str);

//QString --> UTF-8
QByteArray bytes = text.toUtf8();

但注意,上面介绍的前两个 Local 转码的方法,并不保险,跨平台性不佳

所以最好用UTF8,给以后的自己少挖几个坑

使用QTextCodec

QTextCodec用于手工转换编码(QString内部调用此类)

可以在QString 和 std::string 之间相互转换

三、发布程序

当程序中带有中文转换处理时,需要将Qt使用的文字编码库一同发布

Windows下QT应用程序:

1:找到Qt的编码库  Qt\x.x.x\plugins\codecs

2:拷贝codecs这个文件夹,放到目标exe文件所在目录下

3:把VS的运行时库拷贝到codecs目录下

——————————————

尾巴

在对自己没有足够信心的情况下,少在自己的程序中用中文,或许能少挖几个坑吧

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前文章:【Qt学习笔记】6.Qt中的字符、字符串-创新互联
文章URL:http://scyanting.com/article/dcoiee.html