텍스트 파일에서 UTF-8이 아닌 문자를 제거하는 방법


84

utf-8로 인코딩 된 아랍어, 영어, 러시아어 파일이 많이 있습니다. Perl 스크립트를 사용하여 이러한 파일을 처리하려고하면 다음 오류가 발생합니다.

Malformed UTF-8 character (fatal)

이 파일의 내용을 수동으로 확인한 결과 이상한 문자가 발견되었습니다. 이제 파일에서 이러한 문자를 자동으로 제거하는 방법을 찾고 있습니다.

어쨌든 그것을 할 수 있습니까?


2
어쩌면 그것은이 같은입니다 : stackoverflow.com/questions/7656283/...
올라프 DIETSCHE


4
UTF-8이 아닌 문자는 무엇입니까? 잘 구성된 UTF-8 문자열의 모든 문자는 UTF-8 (실제로 유니 코드) 문자입니다! 그들 중 일부는 .... UTF-8 여러 연속 바이트로 인코딩 된
실레 Starynkevitch

3
@BasileStarynkevitch : 오류 메시지는 형식이 잘못된 UTF-8 문자가 있음을 분명히 나타냅니다. 이는 유효한 UTF-8 파일의 일부로 나타날 수없는 바이트가 나타났음을 의미합니다. 어렵지 않습니다. 0xC0 또는 0xC1 바이트, 0xF5..0xFF 또는 그렇지 않으면 유효한 바이트의 시퀀스 문제 일 수 있습니다.
조나단 레플러

답변:


156

이 명령 :

iconv -f utf-8 -t utf-8 -c file.txt

잘못된 모든 문자를 건너 뛰고 UTF-8 파일을 정리합니다.

-f is the source format
-t the target format
-c skips any invalid sequence

11
Mac에서 "iconv -f utf-8 -t utf-8 -c file.txt" 'f'와 '8'사이의 하이픈
Colin

1
Mac에서 클립 보드 내용을 편리하게 변환 할 수 있습니다 pbpaste | iconv -f utf-8 -t -utf-8 -c | pbcopy.. 또한 .NET을 대상으로 모든 특수 문자를 제거하기위한 전역 바로 가기가있는 Alfred 워크 플로를 만들었습니다 ascii.
Lenar Hoyt 2014

1
이것은 나를 위해 완전히 비어있는 파일을 생성했습니다. 모든 사람에게 이것이 잠재적으로 파괴적이라는 것을 알리고이를 실행하기 전에 파일을 백업하고 싶습니다.
counterbeing

5
iconv -f utf-8 -t ascii//TRANSLIT내 문제를 해결했습니다. 둥근 따옴표를 곧은 따옴표로 변환합니다.
대령 패닉

5
-o다른 출력 파일 용
codaamok aug

0

귀하의 메소드는 바이트 단위로 읽고 바이트 단위의 문자 구성을 완전히 이해하고 이해해야합니다. 가장 간단한 방법은 UTF-8 문자 만 출력하는 편집기를 사용하는 것입니다. Textpad는 하나의 선택입니다.


iconv는 cygwin에서 사용할 수 없습니다. Windows / cygwin에서이 작업을 수행 할 수있는 방법이 있습니까? 유효하지 않은 문자를 제거해야하는 큰 (100000 줄 이상) XML 파일이 있습니다. 유효한 utf-8은 신경 쓰지 않습니다. notepad ++를 utf-8로 설정했지만 거기에서 저장 한 후에도 여전히 XML 파서에 오류가 발생합니다
mljm

Windows의 우분투 WSL은 iconv와 함께 제공됩니다
Kat Lim Ruiz

-4
cat foo.txt | strings -n 8 > bar.txt

일을 할 것입니다.


10
아니요, 이것은 또한 많은 유효한 utf-8 문자를 죽일 것입니다.
Zack Burt 2014
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.