web-dev-qa-db-ja.com

iconv不正な入力シーケンス-なぜですか?

テキストファイルをASCII同等のものに変換しようとすると、エラーメッセージiconv: illegal input sequence at position

私が使用するコマンドはiconv -f UTF-8 -t ascii//TRANSLIT file

問題の文字はæ

テキストファイル自体が存在します ここ

なぜそれは違法なシーケンスと言うのですか?入力文字は適切なUTF-8文字(U + 00E6)です。

15
user13107

ファイルはUTF-8ではなくISO-8859-1でエンコードされています。

$ hd 0606461.txt | grep -B1 '^0002c520'
0002c510  64 75 6d 20 66 65 72 69  65 6e 74 20 72 75 69 6e  |dum ferient ruin|
0002c520  e6 0d 0a 2d 2d 48 6f 72  61 63 65 2e 0d 0a 0d 0a  |...--Horace.....|

また、バイト「e6」だけでは有効なUTF-8シーケンスではありません。

したがって、iconv -f latin1 -t ascii//TRANSLIT file

17
vinc17

リンクしたファイルはUTF-8のようですHTMLドキュメント内

$ file 0606461.txt 
0606461.txt: HTML document, ASCII text, with CRLF line terminators

最初にHTML-to-textコンバーターで実行すると、.

iconv -f UTF-8 -t ascii//TRANSLIT < <(html2text 0606461.txt)

次に、あなたが問題を抱えていると思われるUTF-8フラグメントは、エラーなしで音訳されているようです

Si fractus illabatur orbis.
Impavidum ferient ruinæ
--Horace.

なる

Si fractus illabatur orbis.
Impavidum ferient ruinae
--Horace.

html2textユーティリティがシステムにインストールされていない可能性があります-見つからない場合は、pythonモジュールを含む他のコンバーターがあります。

5
steeldriver