[PYTHON] 파이썬에서 파일의 인코딩을 아는 법? [복제]
PYTHON파이썬에서 파일의 인코딩을 아는 법? [복제]
파이썬에서 파일의 인코딩을 얻는 방법을 아는 사람이 있습니까? 코덱 모듈을 사용하여 특정 인코딩으로 파일을 열 수는 있지만 사전에 알아야한다는 것을 알고 있습니다.
import codecs
f = codecs.open("file.txt", "r", "utf-8")
어떤 인코딩이 파일에 사용되는지 자동으로 감지하는 방법이 있습니까?
미리 감사드립니다.
편집하다: 매우 흥미로운 답변을 해주신 모든 분들께 감사드립니다. http://whatismyencoding.com/에 관심이 있습니다. Chardet을 기반으로합니다 (병영 파이썬 프레임 워크에서 제공되는 사이트 이상)
해결법
-
==============================
1.불행하게도 파일 자체를보고 파일의 인코딩을 결정하는 '올바른'방법은 없습니다. 이것은 보편적 인 문제이며 파이썬이나 특정 파일 시스템에 국한되지 않습니다.
불행하게도 파일 자체를보고 파일의 인코딩을 결정하는 '올바른'방법은 없습니다. 이것은 보편적 인 문제이며 파이썬이나 특정 파일 시스템에 국한되지 않습니다.
XML 파일을 읽는 경우 파일의 첫 번째 행에서 인코딩의 의미를 알 수 있습니다.
그렇지 않으면 원시 바이트 형식으로 파일의 데이터를 검사하여 인코딩을 추측하려고 시도하는 chardet (다른 해답에 제공된 솔루션 중 하나)과 같은 경험적 방법을 사용해야합니다. Windows 사용자 인 경우 Windows API는 파일의 데이터를 기반으로 인코딩을 시도하고 추측 할 수있는 메서드를 제공합니다.
-
==============================
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.다음은 인코딩을 추측 할 수있는 작은 스 니펫입니다. 그것은 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.Beautiful Soup의 Unicode Dammit이 있는데, Chardet을 사용하지만 몇 가지 추가 기능이 추가되었습니다.
Beautiful Soup의 Unicode Dammit이 있는데, Chardet을 사용하지만 몇 가지 추가 기능이 추가되었습니다.
XML 또는 HTML 파일 내부에서 인코딩을 읽으려고합니다. 그런 다음 파일 시작 부분에서 BOM 또는 이와 유사한 것을 찾으려고 시도합니다. 그렇게 할 수 없다면, Chardet을 사용합니다.
-
==============================
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,
from https://stackoverflow.com/questions/2144815/how-to-know-the-encoding-of-a-file-in-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Python에서 피클 파일을로드하는 데 걸리는 시간을 줄이는 방법 (0) | 2018.11.07 |
---|---|
[PYTHON] 임베디드 파이썬 중지 (0) | 2018.11.07 |
[PYTHON] Jinja2 템플릿 언어에 '여기'(현재 디렉토리)라는 개념이 있습니까? (0) | 2018.11.07 |
[PYTHON] `import __main__`을 사용하는 것이 좋은 습관입니까? (0) | 2018.11.07 |
[PYTHON] Avro 스키마에 레코드를 중첩하는 방법은 무엇입니까? (0) | 2018.11.06 |