【Qt学习笔记】6.Qt中的字符、字符串
2016-12-07 10:57
246 查看
一、字符集
字符集是一个人为的规定,人们先用一个小册子规定好了“文字字符”与“数字”的对应关系。
七种,每一个字符对应的数字,也成为该字符的编码。例如,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的话:
因此需要对字符串进行转码:
Qt框架提供的转码的方式如下:
所以最好用UTF8,给以后的自己少挖几个坑
使用QTextCodec
QTextCodec用于手工转换编码(QString内部调用此类)
可以在QString 和 std::string 之间相互转换
三、发布程序
当程序中带有中文转换处理时,需要将Qt使用的文字编码库一同发布
Windows下QT应用程序:
1:找到Qt的编码库 Qt\x.x.x\plugins\codecs
2:拷贝codecs这个文件夹,放到目标exe文件所在目录下
3:把VS的运行时库拷贝到codecs目录下
——————————————
尾巴
在对自己没有足够信心的情况下,少在自己的程序中用中文,或许能少挖几个坑吧
字符集是一个人为的规定,人们先用一个小册子规定好了“文字字符”与“数字”的对应关系。
七种,每一个字符对应的数字,也成为该字符的编码。例如,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);运行出来结果就会这样:
因此需要对字符串进行转码:
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目录下
——————————————
尾巴
在对自己没有足够信心的情况下,少在自己的程序中用中文,或许能少挖几个坑吧
相关文章推荐
- 学习笔记之字符和字符串处理
- 算法学习笔记(4)----字符串字符唯一
- 学习笔记 - BufferedReader字符缓冲流从文件读入字符串
- PHP学习笔记--字符串操作 作者:yezi33 字符串的整理: trim():除去字符串开头和末尾的空格或其他字符。函数执行成功时返回删除了string字符串首部和尾部空格的字符串,发生错误时返回空
- swift学习笔记-字符串和字符(Strings and Characters)
- 【Swift】学习笔记(三)——字符和字符串
- .NET/Dot Net学习笔记---.net理解,C#.net的基本类型,字符串转义字符处理..
- C#学习之路,学习笔记 2.2 字符、字符串、数字的初始化与读取
- C语言学习笔记:19_数组-字符数组与字符串(常用字符串函数)
- Swift学习笔记(5)——字符串和字符(一)
- python cookbook 学习笔记 -- 1.8 检查字符串中是否包含某字符集合中的字符
- 学习笔记6——字符,字符串,malloc()函数,单引号,双引号
- 字符和字符串—Swift学习笔记(六)
- python cookbook 学习笔记 -- 1.7 将字符串逐字符或逐词反转
- Swift学习笔记 - 教程学习二 字符串和字符(Strings and Characters)
- 学习笔记之vc 6.0 下 含中文字符串 字符长度 获取及截取
- C/C++学习笔记32:字符串操作与字符子串问题
- python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字
- Python学习笔记(6) -- 字符转数字、字符串转整型(char2num、str2int)
- 【C语言】学习笔记:字符串与字符数组