2012-04-26 32 views
1

ANSI形式でエンコードされたファイルが1つあります(ANSIでエンコードされたNotepad ++で表示されます)。また、特殊文字(度の度合い、ポンドなど)すべての文字をUnicodeに変換します。ANSI形式のファイルをUnicodeに変換する方法

C/C++またはQtでANSIをUnicodeに変換するにはどうすればよいですか?

+0

「ANSI」エンコーディングとは何ですか?それはISO-Latin-1ですか? Linux上で 'iconv'コマンドを試してみることもできますか? –

+0

Basile:ANSIはWindows上の従来の8ビットエンコーディングを指します。テキストファイルはしばしばUnicodeではなく、そのエンコーディングに含まれているため、システム間で移植性が高くありません。言語やロケールの設定によって異なるため、特定のエンコーディングはありません。しかし、アメリカや西ヨーロッパのマシンでは、コードページ1252です。しかし、好きなものに設定することができます。 – Joey

答えて

1

私Qtはまだ非常に錆びですが、以下の線に沿って何か:ファイルを読み書きするための例が含まれ、どちらもQFileQTextStreamの文書からつなぎ合わせ

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; 
} 

QTextStreamのデフォルトは従来のエンコーディングを使用するため、出力の明示的なエンコーディングを設定する必要があります。QTextStreamファイルが大きすぎていない場合は

あなたはおそらくも

out << in.readAll(); 

代わりに回線を介してループを使用することができます。ループは特に、出力ファイルに末尾の改行を追加する可能性があります(ただし、ドキュメントはあまり明確ではありません)。

+0

なぜ 'setCodec(" UTF-8 ")?デフォルトのコーデックは 'codecForLocale'です。この場合、正しいコーデック(" ANSI ")になります。 – MSalters

+0

ANSIではなくUnicodeが必要なためです。 *読み込み*の場合、デフォルトのコーデックで十分ですが、書き込みはできません。うーん、私は彼らがメモリ内の表現だけを必要とするという点で誤解されているようだ。それで、ファイルを書き込む全体が不必要になるでしょう。 – Joey

+0

ああ、そうです。それは意味がある、私はあなたのコードを誤解しています。 – MSalters

0

QTextStreamと読んでください。 QTextCodec::codecForLocaleが適用され、Unicodeには8ビット文字のデフォルト(ANSI)変換が使用されます。

ANSIテキストファイルをMacまたはLinuxにコピーした場合、ANSIの概念がないため、これは機能しません。それらのために、ANSIテキストファイルはASCIIのようになりますので、まずUnicode(UTF-8)に変換してからコピーしてください。

関連する問題