如何使用Qt类检测BOM?我尝试做的是读取UTF-8文件,操纵其内容并将其写回。我可以选择使用QTextStream
设置或删除BOM,但我看不到任何方法可以保留其原始状态(是否存在),因为我无法查询它。
答案 0 :(得分:3)
您可以使用QTextCodec::codecForUtfText
来确定字节数组是否包含BOM:
QFile *file = ...;
bool hasByteOrderMark = QTextCodec::codecForUtfText(file->peek(4), nullptr) != nullptr;
// QTextCodec is owned by Qt - don't free
作为一种快捷方式,如果QTextStream
无法从流中检测到编码,您可以利用generateByteOrderMark
将关闭QTextStream stream(file);
stream.setAutoDetectUnicode(true);
stream.setCodec(QTextCodec::codecForMib(106)); // default to UTF-8
stream.setGenerateByteOrderMark(true);
stream.readLine(); // detect codec and possibly switch off generateByteOrderMark
int mib = stream.codec()->mibEnum(); // detected codec, or UTF-8 (default set above)
bool hasByteOrderMark = stream.generateByteOrderMark();
的(未记录的)事实:
{{1}}
这是未记录的行为,因此如果你想依赖它,你可能想要测试。