일부 바이트의 문자 인코딩을 추측하려는 파이썬 라이브러리 기능이 있습니까? [복제하다

StackOverflow https://stackoverflow.com/questions/269060

문제

이 질문은 이미 여기에 답이 있습니다.

나는 헤더 필드에서 이상한 바이트를 만나는 파이썬으로 메일 처리 소프트웨어를 작성하고 있습니다. 나는 이것이 단지 기본 메일이라고 생각합니다. 메시지 자체는 US-ASCII라고 주장하기 때문에 진정한 인코딩이 있다고 생각하지 않지만 원본 문자열을 꺼내고 싶습니다. UnicodeDecodeError.

그래서 저는 str 그리고 선택적으로 일부 힌트를 받고 나에게 돌려주기 위해 최신 unicode. 물론 하나를 쓸 수는 있지만 그러한 기능이 존재한다면 저자는 아마도 이것에 대해 가장 좋은 방법에 대해 조금 더 깊이 생각했을 것입니다.

또한 Python의 디자인은 암시 적으로 명시 적이며 표준 라이브러리는 텍스트 해독에서 암시 적 마법을 피하도록 설계되었음을 알고 있습니다. 나는 단지 명시 적으로 "가서 추측"이라고 말하고 싶습니다.

도움이 되었습니까?

해결책 3

내가 알 수있는 한, 표준 라이브러리에는 기능이 없지만 위에서 제안한대로 작성하는 것은 너무 어렵지 않습니다. 내가 찾고 있던 실제는 문자열을 디코딩하고 예외를 던지지 않을 것을 보장하는 방법이라고 생각합니다. Or

def decode(s, encodings=('ascii', 'utf8', 'latin1')):
    for encoding in encodings:
        try:
            return s.decode(encoding)
        except UnicodeDecodeError:
            pass
    return s.decode('ascii', 'ignore')

다른 팁

+1 Chardet 모듈 (제안) @insin).

표준 라이브러리에 있지 않지만 다음 명령으로 쉽게 설치할 수 있습니다.

$ pip install chardet

예시:

>>> import chardet
>>> import urllib
>>> detect = lambda url: chardet.detect(urllib.urlopen(url).read())
>>> detect('http://stackoverflow.com')
{'confidence': 0.85663169917190185, 'encoding': 'ISO-8859-2'}    
>>> detect('https://stackoverflow.com/questions/269060/is-there-a-python-lib')
{'confidence': 0.98999999999999999, 'encoding': 'utf-8'}

보다 PIP 설치 하나가 없다면.

당신은 관심이있을 수 있습니다 범용 인코딩 검출기.

내가 찾은 가장 좋은 방법은 블록을 제외한 시도 내에서 가장 일반적인 인코딩과 함께 전망을 반복적으로 해독하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top