오늘 Python 크롤러를 작성 중인데 갑자기 크롤링된 웹 페이지가 비정상이고 오류가 보고되었습니다. UnicodeEncodeError: 'latin-1' 코덱이 41-50 위치의 문자를 인코딩할 수 없습니다: 서수 범위(256)에 없음 UnicodeEncodeError: 'ascii' 코덱은 문자를 서수로 인코딩할 수 없습니다. 이는 명백한 인코딩 형식 문제입니다. 실제로 Python2나 3뿐만 아니라 Java, C와 같은 다른 프로그래밍 언어도 인코딩 형식에 문제가 자주 발생하는데, 이는 매우 골치 아픈 일이며, 특히 ASCII, gbk, utf-8 및 기타 인코딩 간의 변환은 더욱 그렇습니다. . 그래서 정보를 찾아보고, 실습도 해보고, 이런저런 방법을 몇 가지 발견했습니다.
먼저, Python의 시스템 인코딩 형식과 입출력 형식을 어떻게 확인하나요?
>>> import sys >>> sys.getdefaultencoding()# 系统默认编码格式 'UTF-8' >>> sys.stdout.encoding# 输入输出格式 'US-ASCII'
이 경우 현재 명령줄의 입력 및 출력 인코딩이 ASCII라는 의미이므로 수동으로 인코딩해야 합니다. 환경 변수 LANG을 utf-8로 설정하도록 변경하세요.
export LANG="en_US.UTF-8"
우분투 환경에 있다면 위의 명령 줄을 ~/.bashrc에 추가하여 문제를 한 번에 해결할 수 있습니다. 모두 추가한 후 다음 명령을 실행하여 적용하거나 다시 시작하여 적용하세요.
source ~/.bashrc
또는 또 다른 방법은 Python에 대해서만 해당 인코딩을 설정하는 것입니다(위와 동일, 명령줄을 실행하거나 bashrc 파일을 추가):
PYTHONIOENCODING='utf_8' export PYTHONIOENCODING
gbk 인코딩 예시 사진 : # 🎜🎜#
ascii 코딩 테이블 다이어그램 부분: 일반 코드에서 프로그래밍 맨 윗줄에 추가하는 것을 잊지 마세요:# -*- coding: utf-8 -*-
>>>sys.getdefaultencoding()查看当前编码(若报错,先执行>>>import sys >>>reload(sys)); >>>sys.setdefaultencoding('utf8')设置编码
import sys reload(sys) sys.setdefaultencoding('utf8') 重启Python解释器,发现编码已被设置为utf8; 这是因为系统在Python启动的时候,自行调用该文件,设置系统的默认编码,而不需要每次都手动加上解决代码,属于一劳永逸的解决方法。
Decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。 Encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。
>>> 'ABC'.encode('ascii') b'ABC' >>> '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87' >>> '中文'.encode('ascii') 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)
UTF-8 인코딩 변환 도구
】【python3 비디오 튜토리얼
】#🎜🎜 #처음에는 몇 가지 인코딩 형식밖에 없었습니다. 컴퓨터의 대중화와 많은 국가나 조직의 사용으로 인해 점점 더 많은 인코딩 형식이 있지만, 여전히 국제적으로 허용되는 형식은 UTF-8입니다. 따라서 좋은 프로그래밍 습관이 있어야 하며 주로 UTF-8 인코딩 형식을 사용합니다. 인코딩 문제가 발생하면 인코딩 형식을 일관되게 유지하십시오.
위 내용은 Python 인코딩 형식 변경 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!