gpt4 book ai didi

c++ - 检测文本文件编码

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:42 25 4
gpt4 key购买 nike

在我的程序中,我加载了用户提供的纯文本文件:

QFile file(fileName);
file.open(QIODevice::ReadOnly);
QTextStream stream(&file);
const QString &text = stream.readAll();

这在文件为 UTF-8 编码时工作正常,但一些用户尝试导入 Windows-1252 编码文件,如果他们有带有特殊字符的单词(例如“boutonnière”中的“è”),这些将显示不正确。

有没有办法在不要求用户告诉我编码的情况下检测编码,或者至少区分 UTF-8(可能没有 BOM)和 Windows-1252?

最佳答案

事实证明,对于一般情况,自动检测编码是不可能的。

但是,如果文本不是有效的 UTF-8/UTF-16/UTF-32 文本,至少可以回退到系统区域设置。它使用 QTextCodec::codecForUtfText(),尝试使用 UTF-8、UTF-16 和 UTF-32 解码字节数组,如果失败则返回提供的默认编解码器。

实现代码:

QTextCodec *codec = QTextCodec::codecForUtfText(byteArray, QTextCodec::codecForName("System"));
const QString &text = codec->toUnicode(byteArray);

更新

但是,上面的代码不会检测没有 BOM 的 UTF-8,因为 codecForUtfText() 依赖于 BOM 标记。要检测没有 BOM 的 UTF-8,请参阅 https://stackoverflow.com/a/18228382/492336 .

关于c++ - 检测文本文件编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18226858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com