Qt学习笔记之QTextCodec

QTextCodec是Qt中用于处理不同文本编码转换的工具,如从Shift-JIS到Unicode,或者从Unicode到UTF-8。它可以方便地处理非Unicode编码的数据,如KOI8-R或GBK等。在Qt程序中,可以使用QTextCodec::codecForName()创建编解码器对象进行转换。此外,设置默认编码对于处理本地文件系统和tr()函数的字符串至关重要。在Qt5中,不再支持QTextCodec::setCodecForTr()和QTextCodec::setCodecForCString(),推荐在QApplication实例前设置QTextCodec::setCodecForLocale()为UTF-8。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);

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

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

Qt默认的编码时Unicode,Windows下的编码时GBK,Linux下的编码时UTF-8。
QTextCodec 提供的是 字符串 和 字节流 之间的相互转换(也就是字符的编解码)。

Qt5 取消了QTextCodec::setCodecForTr()和QTextCodec::setCodecForCString()这两个函数。直接将 QTextCodec::setCodecForLocale(QTextCodec::codecForName(“UTF8”)) 至于QApplication实例之前即可解决;

————————————————
原文链接:https://blog.csdn.net/a8039974/article/details/104143715

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值