Qt编码之QTextCodec

QTextCodec类提供了文本编码之间的转换。Qt使用Unicode来存储、绘制和操作字符串。在许多情况下,您可能希望处理使用不同编码的数据。例如,大多数日本文档仍然存储在Shift-JIS或ISO 2022-JP中,而俄罗斯用户的文档通常存储在KOI8-R或Windows-1251中。

Qt提供了一组QTextCodec类来帮助将非Unicode格式转换为Unicode或从Unicode转换为非Unicode格式。您还可以创建自己的编解码器类。

//关于QTextCodec对象:
//该对象主要用于非Unicode编码数据与Unicode编码数据之间的转换,例如:
//假设现在有一个采用俄国的KOI8-R编码格式的字符串encodedString,现在将它转换成Unicode
QByteArray encodedString = "Hello"; 
QTextCodec *codec = QTextCodec::codecForName("KOI8-R"); QString string = codec->toUnicode(encodedString);
//上述操作完成后,string里存储的就是Unicode编码的字符串了
//相反的过程:
QTextCodec *codec = QTextCodec::codecForName("UTP-8"); 
QByteArray encodedString = codec->fromUnicode(string); //UTF-8是中文编码
//操作完成后,encodedStirng里存储的就是从Unicode转换来的UTF-8编码的字符串了
//上述代码也实现了从KIO8-R到UTF-8的转换

在Qt程序中出现latin1字符集以外的字符集,我们会立刻马上想到QTextCodec。并且会同时使用下面的几行条代码:

QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(codec);
QTextCodec::setCodecForLocal(codec);
QTextCodec::setCodecForCString(codec);

上面的几行代码的中文意思是:

设置传给tr()函数时的默认字符串编码
用于设置和对本地文件系统读写时候的默认编码格式
用在字符串常量或QByteArray构造QString对象时,使用的一种编码方式

  • Qt默认的编码时Unicode,Windows下的编码时GBK,Linux下的编码时UTF-8。

QTextCodec 提供的是 字符串 和 字节流 之间的相互转换(也就是字符的编解码)。
Qt5 取消了QTextCodec::setCodecForTr()和QTextCodec::setCodecForCString()这两个函数。
直接将 QTextCodec::setCodecForLocale(QTextCodec::codecForName(“UTF8”)) 至于QApplication实例之前即可解决;
————————————————
版权声明:本文为CSDN博主「浩瀚之水_csdn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/a8039974/article/details/104143715

posted @ 2023-05-12 21:32  sgggr  阅读(492)  评论(0编辑  收藏  举报