2016-09-30 44 views
0

我不明白当我创建一个文本流,然后做setCodec(“some_encoding”)会发生什么,它开始假设我正在阅读的文件是在some_encoding和当我做QTextStream :: readAll返回我some_encoding中的QString?或者QTextStream :: readAll在unicode中返回一个QString?如何在Qt中正确读取特定编码的文件?

这是我做的:

QString read(const char* encoding) 
{ 
    QTextStream stream(&file); 
    stream.setCodec(encoding); 
    return stream.readAll(); 
} 

但我没有得到一个unicode字符串回来。所以,底线是,我想知道,如何以某种编码创建文件,将所有内容保存为Unicode到QString中?如果readAll()在指定的编码中返回一个字符串,该如何将该编码转换为unicode?

+0

'QTextStream :: readAll'返回一个'QString',它是UTF-16。目前还不清楚你的意思是“我没有得到一个unicode字符串”。你的意思是,字符串有错误的字符/错误的长度/某些东西,因为它使用错误的编解码器转换为UTF-16? – hyde

+0

@hyde我在我的回答中解释过。我认为这是错误的,因为我从一开始就没有阅读,我将它输出到qDebug()并且输出是空的,这通常发生在编码关闭时。我是编码新手,所以我不知道readAll会以UTF-16返回一个字符串。 – Pavel

回答

0

原来,这与编码没有任何关系。我在阅读之前做了stream.seek(0),它读得很好。我怀疑问题出在编码上,因为通常当他们离开时,你会在任何地方出现问号或空串,在这种情况下,我得到一个空字符串。

相关问题