Qt文本编码转换

QTextCodec *utf8Codec = QTextCodec::codecForName("UTF-8");
QTextCodec *latin1Codec = QTextCodec::codecForName("ISO-8859-1");
QString originalText = "这是一段中文文本"; // 假设这是UTF-8编码的文本
QTextCodec *utf8Codec = QTextCodec::codecForName("UTF-8");
QTextCodec *latin1Codec = QTextCodec::codecForName("ISO-8859-1");

// 将UTF-8编码的文本转换为Latin1编码的QByteArray
QByteArray latin1Bytes = utf8Codec->fromUnicode(originalText);
QByteArray convertedBytes = latin1Codec->toUnicode(latin1Bytes); // 这实际上是一个错误的示范,因为latin1Bytes已经是被误解的文本

// 正确的做法应该是先将UTF-8文本转为QByteArray(如果它本身不是QByteArray的话),然后直接用这个QByteArray去转换编码
QByteArray utf8Bytes = originalText.toUtf8(); // 如果originalText是QString,这一步是必需的
QString convertedText = latin1Codec->toUnicode(utf8Bytes); // 这会产生乱码,因为直接用Latin1解码UTF-8数据

// 正确的转换应该是用UTF-8解码QString,然后如果需要Latin1编码的QByteArray,则这样转换:
QByteArray correctLatin1Bytes = utf8Codec->fromUnicode(originalText.toUtf8()); // 这步其实多余,因为originalText.toUtf8()已经是UTF-8的QByteArray了
// 如果要将UTF-8的QByteArray转换为Latin1的文本(这是不常见的需求,因为通常我们不会将UTF-8转为Latin1文本),需要确保原始文本是用Latin1编码后再用UTF-8解码的(这通常不会发生)
// 正常情况下,我们只需要在显示或保存时使用正确的编码即可,如:
QString displayedText = utf8Codec->toUnicode(utf8Bytes); // 正确显示UTF-8编码的文本
// 假设我们有一个UTF-8编码的文本文件,我们需要读取它并显示为QString
QFile file("example.txt");
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
    QByteArray utf8Bytes = file.readAll();
    QTextCodec *utf8Codec = QTextCodec::codecForName("UTF-8");
    QString decodedText = utf8Codec->toUnicode(utf8Bytes);
    // 现在decodedText包含了正确的文本,可以显示在UI上或进行其他处理
    file.close();
}

// 如果我们需要将这个QString保存为Latin1编码的文件
QFile outputFile("output.txt");
if (outputFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
    QTextCodec *latin1Codec = QTextCodec::codecForName("ISO-8859-1");
    QByteArray latin1Bytes = latin1Codec->fromUnicode(decodedText);
    outputFile.write(latin1Bytes);
    outputFile.close();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值