복붙노트

[PYTHON] 파이썬에서 파일의 인코딩을 아는 법? [복제]

PYTHON

파이썬에서 파일의 인코딩을 아는 법? [복제]

파이썬에서 파일의 인코딩을 얻는 방법을 아는 사람이 있습니까? 코덱 모듈을 사용하여 특정 인코딩으로 파일을 열 수는 있지만 사전에 알아야한다는 것을 알고 있습니다.

import codecs
f = codecs.open("file.txt", "r", "utf-8")

어떤 인코딩이 파일에 사용되는지 자동으로 감지하는 방법이 있습니까?

미리 감사드립니다.

편집하다: 매우 흥미로운 답변을 해주신 모든 분들께 감사드립니다. http://whatismyencoding.com/에 관심이 있습니다. Chardet을 기반으로합니다 (병영 파이썬 프레임 워크에서 제공되는 사이트 이상)

해결법

  1. ==============================

    1.불행하게도 파일 자체를보고 파일의 인코딩을 결정하는 '올바른'방법은 없습니다. 이것은 보편적 인 문제이며 파이썬이나 특정 파일 시스템에 국한되지 않습니다.

    불행하게도 파일 자체를보고 파일의 인코딩을 결정하는 '올바른'방법은 없습니다. 이것은 보편적 인 문제이며 파이썬이나 특정 파일 시스템에 국한되지 않습니다.

    XML 파일을 읽는 경우 파일의 첫 번째 행에서 인코딩의 의미를 알 수 있습니다.

    그렇지 않으면 원시 바이트 형식으로 파일의 데이터를 검사하여 인코딩을 추측하려고 시도하는 chardet (다른 해답에 제공된 솔루션 중 하나)과 같은 경험적 방법을 사용해야합니다. Windows 사용자 인 경우 Windows API는 파일의 데이터를 기반으로 인코딩을 시도하고 추측 할 수있는 메서드를 제공합니다.

  2. ==============================

    2.BOM (http://en.wikipedia.org/wiki/Byte_order_mark)을 사용하여 인코딩을 검색하거나이 라이브러리를 사용해 볼 수 있습니다.

    BOM (http://en.wikipedia.org/wiki/Byte_order_mark)을 사용하여 인코딩을 검색하거나이 라이브러리를 사용해 볼 수 있습니다.

    https://github.com/chardet/chardet

  3. ==============================

    3.다음은 인코딩을 추측 할 수있는 작은 스 니펫입니다. 그것은 latin1과 utf8 사이를 꽤 좋은 것으로 추측합니다. 바이트 문자열을 유니 코드 문자열로 변환합니다.

    다음은 인코딩을 추측 할 수있는 작은 스 니펫입니다. 그것은 latin1과 utf8 사이를 꽤 좋은 것으로 추측합니다. 바이트 문자열을 유니 코드 문자열로 변환합니다.

    # Attention: Order of encoding_guess_list is import. Example: "latin1" always succeeds.
    encoding_guess_list=['utf8', 'latin1']
    def try_unicode(string, errors='strict'):
        if isinstance(string, unicode):
            return string
        assert isinstance(string, str), repr(string)
        for enc in encoding_guess_list:
            try:
                return string.decode(enc, errors)
            except UnicodeError, exc:
                continue
        raise UnicodeError('Failed to convert %r' % string)
    def test_try_unicode():
        for start, should in [
            ('\xfc', u'ü'),
            ('\xc3\xbc', u'ü'),
            ('\xbb', u'\xbb'), # postgres/psycopg2 latin1: RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
            ]:
            result=try_unicode(start, errors='strict')
            if not result==should:
                raise Exception(u'Error: start=%r should=%r result=%r' % (
                        start, should, result))
    
  4. ==============================

    4.Beautiful Soup의 Unicode Dammit이 있는데, Chardet을 사용하지만 몇 가지 추가 기능이 추가되었습니다.

    Beautiful Soup의 Unicode Dammit이 있는데, Chardet을 사용하지만 몇 가지 추가 기능이 추가되었습니다.

    XML 또는 HTML 파일 내부에서 인코딩을 읽으려고합니다. 그런 다음 파일 시작 부분에서 BOM 또는 이와 유사한 것을 찾으려고 시도합니다. 그렇게 할 수 없다면, Chardet을 사용합니다.

  5. ==============================

    5.

    #!/usr/bin/python
    
    """
    Line by line detecting encoding if input and then convert it into UTF-8
    Suitable for look at logs with mixed encoding (i.e. from mail systems)
    
    """
    
    import sys
    import chardet
    
    while 1:
            l = sys.stdin.readline()
            e = chardet.detect(l)
    
            u = None
            try:
                    if e['confidence'] > 0.3:
                            u = unicode(l, e['encoding'])
            except:
                    pass
    
            if u:
                    print u,
            else:
                    print l,
    
  6. from https://stackoverflow.com/questions/2144815/how-to-know-the-encoding-of-a-file-in-python by cc-by-sa and MIT license