【发布时间】:2013-08-14 08:36:30
【问题描述】:
在我的程序中,我加载了用户提供的纯文本文件:
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,而不要求用户告诉我编码?
【问题讨论】:
-
恐怕不是,真的。纯文本文件的诅咒。一个快速的谷歌支持这一点:qt-project.org/forums/viewthread/12619
-
尝试将文本解码为 UTF-8。如果失败,则不是 UTF-8。
-
我怎么知道它失败了?
-
@Mattsjo 是的,我在发布我的问题之前阅读了该内容。第二部分怎么样 - 只是区分 UTF-8 和 Windows-1252?那可能吗?顺便说一句,我知道 Notepad++ 可以做到这一点,但可能他们为此编写了很多代码。
-
什么意思?你知道什么是UTF-8吗?您可以判断一个字节序列是否是有效的 UTF-8 序列。
标签: c++ qt character-encoding