iconv 잘못된 입력 순서 - 이유는 무엇입니까?

iconv 잘못된 입력 순서 - 이유는 무엇입니까?

텍스트 파일을 해당 ASCII 파일로 변환하려고 하면 다음 오류가 발생합니다 iconv: illegal input sequence at position.

내가 사용하는 명령은iconv -f UTF-8 -t ascii//TRANSLIT file

공격형 캐릭터는 입니다 æ.

텍스트 파일 자체가 존재합니다.여기.

시퀀스가 불법이라고 하는 이유는 무엇입니까? 입력 문자는 올바른 UTF-8 문자(U+00E6)입니다.

답변1

파일은 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.

답변2

연결한 파일이 UTF-8인 것 같습니다.HTML 문서 내에서

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

먼저 HTML을 텍스트로 변환하는 변환기를 통해 실행하는 경우, 예를 들어

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 모듈을 포함한 다른 변환기가 있는 것입니다.

관련 정보