2016-09-30 8 views
0

テキストストリームを作成してからsetCodec( "some_encoding")を実行すると、読み込み中のファイルがsome_encodingになっているとみなされ、QTextStream :: readAllを返すと何が起きるのか分かりませんsome_encodingのQString? QTextStream :: readAllはQStringをUnicodeで返しますか?Qtの特定のエンコーディングでファイルを正しく読み込むには?

は、ここで私は何をすべきかです:

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

しかし、私は戻ってUnicode文字列を得ることはありません。それで、最終行は、私が知りたいのは、どのようにして、あるエンコーディングのファイルを持っているのですか?すべての内容をQStringにUnicodeとして保存しますか? readAll()が指定されたエンコーディングの文字列を返す場合、QStringをそのエンコーディングからユニコードに変換するにはどうすればよいですか?

+0

'QTextStream :: readAll'は' QString'を返します。これはUTF-16です。 「私はユニコード文字列を返さない」という意味は不明です。間違ったコーデックを使用してUTF-16に変換されたため、文字列に間違った長さ/何かがありますか? – hyde

+0

@hyde私は私の答えで説明しました。私が間違っていると思ったのは、最初から読んでいなかったので、qDebug()に出力していました。出力が空でした。これは通常、エンコードがオフのときに起こります。私は新しいエンコーディングだから、readAllがUTF-16で文字列を返すことは知らなかった。 – Pavel

答えて

0

これは、エンコードとは関係ありません。読んでみる前にstream.seek(0)をして、それをすべて読んだ。私は問題がエンコーディングにあったと思っていました。なぜなら、通常、あなたが離れているときに疑問符や空の文字列がどこかで取得されるからです。この場合、空の文字列があります。

関連する問題