ANSI形式でエンコードされたファイルが1つあり(Notepad ++でANSIでエンコードされているように表示されます)、特殊文字(摂氏度、ポンドなど)も表示され、読み取り中にすべての文字をユニコードに変換したいと思います。
C/C++ または Qt で ANSI を Unicode に変換するにはどうすればよいですか?
私のQtはまだ非常にさびていますが、次の行に沿ったものです:
QFile inFile("foo.txt");
if (!inFile.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QFile outFile("foo.out.txt");
if (!outFile.open(QIODevice::WriteOnly | QIODevice::Truncate))
return;
QTextStream in(&inFile);
QTextStream out(&outFile);
out.setCodec("UTF-8");
while (!in.atEnd()) {
QString line = in.readLine();
out << line;
}
と のドキュメントからまとめたものでQFile
、QTextStream
どちらにもファイルの読み取りと書き込みの例が含まれています。のデフォルトQTextStream
は従来のエンコーディングを使用するため、 output に明示的なエンコーディングを設定するだけで済みますQTextStream
。
ファイルが大きすぎない場合は、おそらく使用することもできます
out << in.readAll();
行上のループの代わりに。ループは特に、出力ファイルに末尾の改行を追加する可能性があります (ただし、ドキュメントはそれについてあまり明確ではありません)。
で読むだけQTextStream
です。QTextCodec::codecForLocale
8 ビット文字から Unicode へのデフォルト (「ANSI」) 変換を使用するが適用されます。
ANSI の概念がないため、ANSI テキスト ファイルを Mac または Linux にコピーした場合、これは機能しないことに注意してください。それらの場合、ANSI テキスト ファイルは ASCII 形式になるため、最初に Unicode (UTF-8) に変換してからコピーする必要があります。