오늘 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 -*-명령줄을 사용하여 Python 인코딩을 설정할 수 있지만 이 세션에서만 적용됩니다.
>>>sys.getdefaultencoding()查看当前编码(若报错,先执行>>>import sys >>>reload(sys)); >>>sys.setdefaultencoding('utf8')设置编码Reload 프로그램 코드의 SYS 모듈을 사용하고 uft-8을 설정하는 것도 가능하지만 pycharm에서 오류가 표시됩니다
import sys reload(sys) sys.setdefaultencoding('utf8') 重启Python解释器,发现编码已被设置为utf8; 这是因为系统在Python启动的时候,自行调用该文件,设置系统的默认编码,而不需要每次都手动加上解决代码,属于一劳永逸的解决方法。일반적인 개발 중에 우리 모두는 트랜스코딩을 위해 Decode 및 Encode를 사용하는 것을 알고 있습니다. 운영.
Decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。 Encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。최신 Python 3 버전에서는 문자열 유형이 str이며, 이는 메모리에서 한 문자가 여러 바이트에 해당합니다. 네트워크에 저장하거나 디스크에 저장하려면 str을 바이트 단위로 변환해야 합니다. Str은 유니코드로 표현되면 encode() 메서드를 통해 지정된 바이트로 인코딩될 수 있습니다. 예:
>>> '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)문자열을 연산할 때 str과 bytes가 자주 발생합니다. 서로 변환합니다. . 잘못된 문자를 방지하려면 항상 UTF-8 인코딩을 사용하여 문자열과 바이트를 변환해야 합니다. 친숙한 링크【
UTF-8 인코딩 변환 도구
】【python3 비디오 튜토리얼
】#🎜🎜 #처음에는 몇 가지 인코딩 형식밖에 없었습니다. 컴퓨터의 대중화와 많은 국가나 조직의 사용으로 인해 점점 더 많은 인코딩 형식이 있지만, 여전히 국제적으로 허용되는 형식은 UTF-8입니다. 따라서 좋은 프로그래밍 습관이 있어야 하며 주로 UTF-8 인코딩 형식을 사용합니다. 인코딩 문제가 발생하면 인코딩 형식을 일관되게 유지하십시오.
위 내용은 Python 인코딩 형식 변경 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!