首页 > 解决方案 > 如何通过 Qt 更改记事本的编码

问题描述

我正在通过 Qt 在记事本中打开一个文件,但记事本以错误的编码读取它。我让图片解释一下......(我在两张图片中圈出了编码)

在此处输入图像描述

这就是我得到的

这就是我想要得到的

在此处输入图像描述

如何强制记事本以正确的编码读取它?

标签: qt

解决方案


在记事本中打开之前尝试修改您的文件 - 根据https://en.wikipedia.org/wiki/Byte_order_mark添加 UTF-8 标记。

这是代码(简化,适用于 Windows):

#include <QFile>
#include <QProcess>

int main(int /*argc*/, char */*argv*/[])
{
    const QString notepath = "D:\\your-file.bin";
    const static uint8_t utf8marker[] = {0xEF, 0xBB, 0xBF};

    QFile file(notepath);
    file.open(QIODevice::ReadWrite);
    auto buffer = file.readAll();

    buffer.prepend(reinterpret_cast<const char*>(utf8marker), sizeof(utf8marker));

    file.seek(0);
    file.write(buffer);
    file.close();

    QProcess::startDetached("C:\\Windows\\system32\\notepad.exe", {notepath});
    return 0;
}

推荐阅读