2016-09-30 172 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),它讀得很好。我懷疑問題出在編碼上,因爲通常當他們離開時,你會在任何地方出現問號或空串,在這種情況下,我得到一個空字符串。

相關問題