2011-10-07 22 views
7

私のようにUnix上で記述されたファイルがあります:のiconvユニコード未知の入力フォーマット

$file xxx.csv 
xxx.csv: UTF-8 Unicode text, with very long lines 

は、いくつかの特殊文字をレンダリングしますless/viでそれを表示する(SSA°...)読めない(├╝)。 Windowsではこれも表示されません。 dbに直接インポートすると、特殊文字が他の特殊文字(+ä、+ñ、...)に変更されます。

これをiconvで「既定の読み取り可能な」エンコードに変換したかったのです。 私は出力が、私はそうでない私は、ファイルを推測してい

はやや別の形式でエンコードされているのと同じメッセージを返しますように、入力とUTF-8などのUnicodeを使用してのiconv

$iconv -f UTF-8 -t ISO-8859-1 xxx.csv > yyy.csv 
iconv: illegal input sequence at position 1234 

でそれを変換しようとすると、どのようにしてどのようなフォーマットに変換して "普遍的な"読み込み可能なのかを知ることができます...

+0

ファイルを開くエンコードを変更できるテキストエディタで開きます。ブラウザが最悪の場合も同様です。利用可能なエンコーディングで遊んで、文字が正しく表示されるかどうかを確認します。 – deceze

+0

私はメモ帳++で試しましたが、それは680MBで、メモ帳++はそれが大きすぎると教えてくれます。 –

+0

ファイルは、 'file'が推測しても明らかにUTF-8ではありません。オフセット1234から始まる8バイトを、その16進数形式で表示できますか? –

答えて

4

WindowsはファイルをUTF-8として解釈できませんでした。それは子嚢としてそれを読み込み、それを変換しようとしている2文字の解釈ä(アスキー195 164)

なり、その後ä、私は私の作品解決策を見つけた:

iconv -f UTF-8 -t WINDOWS-1252//TRANSLIT --output=outfile.csv inputfile.csv 

今私が見ることができますあなたが扱うファイルの種類がわからない場合はUTF-16にUTF-8に変換するのSQLServer compabilityのために編集者

で正しく特殊文字は、より良い動作します...ただ、ファイルサイズはかなり

1

を育てますあなたはそれを次のように見つけることができます。

file file_name 

上記のコマンドは、ファイル形式を指定します。それに応じてiconvを使用することができます。 たとえば、ファイル形式がUTF-16で、UTF-8に変換する場合は、次のようにします。

iconv -f UTF-16 -t UTF-8 file_name >output_file_name 

これは、あなたが探しているものに洞察力を与えます。

8

UTF-8からISO-8859-1への変換は、UTF-8テキストにISO-8859-1で表現できる文字のみが含まれている場合にのみ機能します。そうでない場合は、これらの文字を無視(//無視)または近似(// TRANSLIT)することで、これらの文字に何が必要かを指定する必要があります。これらの2つのうちの1つを試してみてください:

iconv -f UTF-8 -t ISO-8859-1//IGNORE --output=outfile.csv inputfile.csv 
iconv -f UTF-8 -t ISO-8859-1//TRANSLIT --output=outfile.csv inputfile.csv 

ほとんどの場合、近似は最良の解決法です。アクセント付きの文字をアクセントのない相手に、ユーロ記号をEURに...

関連する問題