Python은 중국어 문자 인코딩 문제를 해결합니다: Unicode Decode Error_python
머리말
최근 프로젝트 필요로 인해 중국어가 포함된 txt 문서를 읽고 파일을 저장해야 합니다. 문서는 이전에 base64로 인코딩되어 모든 중국어 문자가 왜곡된 문자로 읽히고 표시되었습니다. 프로젝트 팀이 Base64를 포기한 후 두 가지 오류가 연속적으로 발생했습니다:
ascii codec can't encode characters in position ordinal not in range 128 UnicodeDecodeError: ‘utf8' codec can't decode byte 0x。
ascii, unicode 및 utf-8에 대해 모른다면 다음을 읽어보세요. 이전 기사는 문자열과 인코딩에 관한 것입니다
그렇다면 다음 세 가지 개념을 이해해야 합니다.
ascii는 숫자, 영문자 및 일부 문자만 나타낼 수 있습니다. 특수 기호는 한자를 나타낼 수 없습니다.
유니코드와 utf-8은 모두 한자를 나타낼 수 있습니다. 유니코드는 고정 길이이고 utf-8은 가변 길이입니다.
메모리 저장 방식은 일반적으로 유니코드인 반면, 디스크 파일 저장 방식은 일반적으로 utf-8을 사용하는데, utf-8을 사용하면 저장 공간을 절약할 수 있기 때문입니다
그럼 란 무엇인가요? 파이썬의 기본 인코딩은 무엇입니까?
>>> import sys >>> sys.getdefaultencoding() 'ascii' >>> reload(sys) <module 'sys' (built-in)> >>> sys.setdefaultencoding('utf-8') >>> sys.getdefaultencoding() 'utf-8'
파이썬의 기본 인코딩은 ascii이며, sys.setdefaultencoding('utf-8')
함수를 통해 파이썬의 기본 인코딩을 설정할 수 있습니다.
파이썬에서는 인코딩과 디코딩을 통해 데이터 인코딩을 변경할 수 있습니다. 예를 들면 다음과 같습니다.
>>> u'汉字' u'\u6c49\u5b57' >>> u'汉字'.encode('utf-8') '\xe6\xb1\x89\xe5\xad\x97' >>> u'汉字'.encode('utf-8').decode('utf-8') u'\u6c49\u5b57'
다음을 통해 인코딩을 설정할 수 있습니다. 두 가지 기능.
그럼 파이썬에서 str은 어떤 유형인가요?
>>> import binascii >>> '汉字' '\xba\xba\xd7\xd6' >>> type('汉字') <type 'str'> >>> print binascii.b2a_hex('汉字') babad7d6 >>> print binascii.b2a_hex(u'汉字') Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) >>> print binascii.b2a_hex(u'汉字'.encode('utf-8')) e6b189e5ad97 >>> print binascii.b2a_hex(u'汉字'.encode('gbk')) babad7d6
binascii는 데이터의 바이너리를 ascii로 변환합니다. 위의 설명은 '한자'의 유형이 str이고 바이너리는 다음과 같습니다. babad7d6, u '한자'는 ascii로 변환할 수 없어 처음에 첫 번째 오류가 보고됩니다. 해결책은 str 유형으로 .encode('utf-8')하는 것입니다. 내 명령줄은 Windows의 기본 GBK 인코딩을 사용하기 때문에 모든 u'한자'.encode(‘gbk')
가 나타날 때 출력 결과는 '한자' 결과와 동일합니다.
요약하자면, Python의 str은 실제로 유니코드 유형입니다. Python의 기본 인코딩은 ASCII가 아닌 것을 ASCII로 변환할 때 다음 규칙을 기억하세요. >
- unicode => encode('적합한 인코딩') => str
- str => decode('적합한 인코딩') => unicode
import sys reloads(sys) sys.setdefaultencoding('utf-8')
두 번째 문제는 파일을 읽을 때 오류가 발생하는 문제입니다. UTF-8 파일에는 BOM 모드와 BOM 없음 모드가 있습니다. 둘의 차이점은 BOM 파일이 BOM 없는 파일보다 헤더가 하나 더 많아 UTF-8 모드에서 파일을 읽을 때 오류가 발생한다는 점인 것 같습니다. 이전에 파일을 읽어보려고 했는데, 먼저 BOM이 있는지 판단하고 BOM 파일의 헤더를 건너뛰었는데 정말 당황스럽더군요.
구체적인 작업 방법은 코덱 라이브러리를 사용하여 파일을 읽는 것입니다(이 라이브러리는 파일의 헤더를 감지하는 것 같습니다).
import codecs codecs.open(file_name, "r",encoding='utf-8', errors='ignore')
인코딩 문제의 경우 ASCII, 유니코드 및 utf-8의 작동 원리를 이해해야 합니다.
한자 인코딩 문제에 대한 더 많은 Python 솔루션: Unicode Decode Error_python 관련 기사, PHP 중국어 웹사이트에 주목하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Linux 터미널에서 Python 버전을 보려고 할 때 Linux 터미널에서 Python 버전을 볼 때 권한 문제에 대한 솔루션 ... Python을 입력하십시오 ...

Python의 Pandas 라이브러리를 사용할 때는 구조가 다른 두 데이터 프레임 사이에서 전체 열을 복사하는 방법이 일반적인 문제입니다. 두 개의 dats가 있다고 가정 해

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

정규 표현식은 프로그래밍의 패턴 일치 및 텍스트 조작을위한 강력한 도구이며 다양한 응용 프로그램에서 텍스트 처리의 효율성을 높입니다.

Uvicorn은 HTTP 요청을 어떻게 지속적으로 듣습니까? Uvicorn은 ASGI를 기반으로 한 가벼운 웹 서버입니다. 핵심 기능 중 하나는 HTTP 요청을 듣고 진행하는 것입니다 ...

이 기사는 Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask 및 요청과 같은 인기있는 Python 라이브러리에 대해 설명하고 과학 컴퓨팅, 데이터 분석, 시각화, 기계 학습, 웹 개발 및 H에서의 사용에 대해 자세히 설명합니다.

파이썬에서 문자열을 통해 객체를 동적으로 생성하고 메소드를 호출하는 방법은 무엇입니까? 특히 구성 또는 실행 해야하는 경우 일반적인 프로그래밍 요구 사항입니다.
