Python 인코딩 형식 변경 문제

anonymity
풀어 주다: 2019-04-20 14:31:01
원래의
6597명이 탐색했습니다.

오늘 Python 크롤러를 작성 중인데 갑자기 크롤링된 웹 페이지가 비정상이고 오류가 보고되었습니다. UnicodeEncodeError: 'latin-1' 코덱이 41-50 위치의 문자를 인코딩할 수 없습니다: 서수 범위(256)에 없음 UnicodeEncodeError: 'ascii' 코덱은 문자를 서수로 인코딩할 수 없습니다. 이는 명백한 인코딩 형식 문제입니다. 실제로 Python2나 3뿐만 아니라 Java, C와 같은 다른 프로그래밍 언어도 인코딩 형식에 문제가 자주 발생하는데, 이는 매우 골치 아픈 일이며, 특히 ASCII, gbk, utf-8 및 기타 인코딩 간의 변환은 더욱 그렇습니다. . 그래서 정보를 찾아보고, 실습도 해보고, 이런저런 방법을 몇 가지 발견했습니다.

먼저, Python의 시스템 인코딩 형식과 입출력 형식을 어떻게 확인하나요?

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 인코딩 예시 사진 : # 🎜🎜#

Python 인코딩 형식 변경 문제

ascii 코딩 테이블 다이어그램 부분:

Python 인코딩 형식 변경 문제

일반 코드에서 프로그래밍 맨 윗줄에 추가하는 것을 잊지 마세요:

# -*- 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: &#39;ascii&#39; codec can&#39;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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿