ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

QT 解决乱码实例

2022-01-31 09:34:42  阅读:140  来源: 互联网

标签:编码 codecForName UTF QT 乱码 实例 QString QTextCodec const


 QString 使用的是 UTF-16

1、就像 std::string 做的一样, QString 可以在必要的时候由 const char* 隐 式 或 显 式 转 换 而 成 。 这 个 过 程 中 使 用 的 编 码 , 就 是 QTextCodec::codecForCStrings 。

2、Qt 有一个函数, QObject::tr ,也可以将 const char* 转换为 QString 。 这个过程中使用的编码方式由 QTextCodec::codecForTr 指定。

3、另外 QTextCodec::codecForLocale 表明当前系统所用编码。一般中文 Windows 应该是 GBK 。中文 Linux 则一般为 UTF-8 。

解决乱码办法:

QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8")); 将 QObject::tr 和 const char* 的编码都改成 UTF-8 ,并 且使用 UTF-8 保存文件。这样就可以保证在任何语言的 操作系统上面都可以显示正确的中文。 但是要特别注意的是,修改 codecForLocale 要慎重! 在 Qt 里面, codecForLocale 的作用主要有两个,一个 是与外部文件读写的时候使用的默认编码,一个是向命 令行输出信息( qDebug )使用的编码。

例如:

 

4、除了 const char* 的隐式转换和 QObject::tr 的转换之外, Qt 事实上有更一般的字符编码转换方式。

// 我们的源文件是 UTF-8 格式的,因此建立一个 QString 。

QString s = QString::fromUtf8(" 这是 UTF-8 的字符串 ");

// 将 QString 转换为 GBK 格式的 QByteArray 字符数组。

// QByteArray::data() 可以拿到 const char* 。

QByteArray gbk_s = QTextCodec::codecForName("gbk")->fromUnicode(s);

// 然后再从 GBK 字符数组转换回 QString 。

QString s2 = QTextCodec::codecForName("gbk")->toUnicode(gbk_s);

有关文件 IO 的编码处理、

5、事实上 Qt 读取文件可以用任何一种编码,只是默认以 codecForLocale 而已。

使用 QTextStream 可以通过文本方式读取 QFile ,而 QTextStream 则可以设定使用的编码方式。

就算文件名有中文也不怕。只要正确转换为 QString ,剩 下的就交给 Qt 吧!

QFile file(QString::fromUtf8(" 中文名 .txt"));

if (file.open(QIODevice::ReadOnly))

{

QTextStream fin(&file);

fin.setCodec(QTextCodec::codecForName("utf-8"));

fin.readLine();

}

标签:编码,codecForName,UTF,QT,乱码,实例,QString,QTextCodec,const
来源: https://blog.csdn.net/u011269801/article/details/122758118

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有