
qt中的toUtf8, toLatin1, Local8bit, toUcs4(转)
发布日期:2021-05-09 00:21:14
浏览次数:18
分类:博客文章
本文共 1251 字,大约阅读时间需要 4 分钟。
转自:
1 首先说下字符集。
gb18030字符集兼容了gbk字符集,以两个字节表示一个文字。windows系统可能使用的就是这两种的一种。
unicode字符集以2个或以上的字节表示一个汉字。
通用字符集(Universal Character Set, UCS)是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所定义的标准字符集。UCS-2用两个字节编码,UCS-4用4个字节编码。
utf8字符集以2个或以上的字节表示一个汉字。实际上具体的数值和unicode有很大的相关性。
ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF。亦称为Latin1。
2 QString内部可能是使用unicode字符集来存储文字。具体输出的时候,就可以输出该文字对应的unicode, ucs4, utf8, gb18030的编码。
3 代码示例
使用qtcreator创建main.cpp,它默认代码里的汉字使用utf8字符集。不要使用msvc编译器,因为它默认汉字使用gb18030字符集
#include#include int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); QString tmp="汉字"; qDebug() << "tmp=" << tmp << endl; qDebug() << "toUtf8" << tmp.toUtf8() << endl; //返回utf8编码的一串数字 qDebug() << "toLatin1" << tmp.toLatin1() << endl; //"汉字"不在latin1字符集中,所以结果无意义(为??) char *p = new char[1+strlen(tmp.toLatin1().data())]; strcpy(p, tmp.toLatin1().data()); for (int i=0; p[i] != '\0'; i++) { printf("0x%02x ", p[i]); } printf("\n"); delete p; qDebug() << "toLocal8bit" << tmp.toLocal8Bit() << endl;//返回windows操作系统设置的字符集gb18030的编码.解决中文乱码的一种方式:myBtn->setTesxt(QString::fromLocal8Bit("中文");
qDebug() << "toUcs4" << tmp.toUcs4() << endl; //返回ucs4编码组成的QVector,一个汉字占用4字节 return a.exec(); }
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年05月05日 17时47分53秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
GitHub上传时,项目在已有文档时直接push出现错误解决方案
2019-03-11
文件系统的层次结构
2019-03-11
vue(渐进式前端框架)
2019-03-11
vscode设置eslint保存文件时自动修复eslint错误
2019-03-11
Remove Extra one 维护前缀最大最小值
2019-03-11
Linux操作系统的安装与使用
2019-03-12
C++ 继承 详解
2019-03-12
OSPF多区域
2019-03-12
Docker入门之-镜像(二)
2019-03-12
重置UAG Application admin密码
2019-03-12
嵌入式系统试题库(CSU)
2019-03-12
setup facatory9.0打包详细教程(含静默安装和卸载)
2019-03-12
Linux kernel pwn --- CSAW2015 StringIPC
2019-03-12
IDEA 找不到 Persistence窗口解决办法
2019-03-12
Form窗体属性
2019-03-12
vue 错误收集
2019-03-12
00010.02最基础客户信息管理软件(意义类的小项目,练习基础,不涉及数据库)
2019-03-12
00013.05 字符串比较
2019-03-12
Effective Java 读书笔记
2019-03-12