파일이 유효한 UTF-8인지 확인하는 방법은 무엇입니까?
유효한 UTF-8이어야하지만 그렇지 않은 일부 데이터 파일을 처리 중이므로 파서 (내 제어가 아님)가 실패합니다. UTF-8 형식의 데이터를 사전 검증하는 단계를 추가하고 싶지만 아직이 작업에 도움이되는 유틸리티를 찾지 못했습니다.
거기의 웹 서비스 죽은 것으로 보인다 W3C에서, 그리고 내가 Windows 전용 검증 발견 한 도구 보고서 무효 UTF-8 파일하지만 어떤 라인 / 문자 수정에보고하지 않음을.
드롭하여 사용할 수있는 도구 (이상적으로는 크로스 플랫폼) 또는 데이터로드 프로세스의 일부를 만들 수있는 ruby / perl 스크립트에 만족합니다.
GNU iconv를 사용할 수 있습니다.
$ iconv -f UTF-8 your_file -o /dev/null; echo $?
또는 macOS와 같은 이전 버전의 iconv를 사용하는 경우 :
$ iconv -f UTF-8 your_file > /dev/null; echo $?
이 명령은 파일이 성공적으로 변환 될 수 있으면 0을 반환하고 그렇지 않으면 1을 반환합니다. 또한 잘못된 바이트 시퀀스가 발생한 바이트 오프셋을 인쇄합니다.
편집 : 출력 인코딩을 지정할 필요가 없으며 UTF-8로 간주됩니다.
python 및 str.encode | decode 함수를 사용하십시오.
>>> a="γεια"
>>> a
'\xce\xb3\xce\xb5\xce\xb9\xce\xb1'
>>> b='\xce\xb3\xce\xb5\xce\xb9\xff\xb1' # note second-to-last char changed
>>> print b.decode("utf_8")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.5/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 6: unexpected code byte
throw 된 예외에는 .args 속성에서 요청 된 정보가 있습니다.
>>> try: print b.decode("utf_8")
... except UnicodeDecodeError, exc: pass
...
>>> exc
UnicodeDecodeError('utf8', '\xce\xb3\xce\xb5\xce\xb9\xff\xb1', 6, 7, 'unexpected code byte')
>>> exc.args
('utf8', '\xce\xb3\xce\xb5\xce\xb9\xff\xb1', 6, 7, 'unexpected code byte')
moreutils 컬렉션 에서 isutf8 을 사용할 수 있습니다 .
$ apt-get install moreutils
$ isutf8 your_file
쉘 스크립트에서 --quiet스위치를 사용하고 유효한 utf-8 파일의 경우 0 인 종료 상태를 확인하십시오.
gnu iconv 라이브러리는 어떻습니까? iconv () 함수 사용 : "입력에서 유효하지 않은 멀티 바이트 시퀀스가 발견되었습니다.이 경우 errno를 EILSEQ로 설정하고 (size_t) (-1)을 반환합니다. * inbuf는 유효하지 않은 멀티 바이트 시퀀스의 시작 부분을 가리 킵니다. "
편집 : 오-스크립팅 언어를 원하는 부분을 놓쳤습니다. 그러나 명령 줄 작업의 경우 iconv 유틸리티도 유효성을 검사해야합니다.
참고 URL : https://stackoverflow.com/questions/115210/how-to-check-whether-a-file-is-valid-utf-8
'Nice programing' 카테고리의 다른 글
| 회귀 모델에서 스크리닝 (다중) 공선 성 (0) | 2020.11.24 |
|---|---|
| 웹 서버로서의 Amazon EC2? (0) | 2020.11.24 |
| SQL Server의 매개 변수 스니핑 (또는 스푸핑) (0) | 2020.11.24 |
| 소멸자 대 IDisposable? (0) | 2020.11.24 |
| gradle-다른 jar와 함께 lib dir이있는 jar를 어떻게 빌드합니까? (0) | 2020.11.24 |