python 的requests问题
迷茫
迷茫 2017-04-18 10:34:16
0
5
1018

导入requests,提示报错 ''' UnicodeDecodeError: 'ascii' codec can't decode byte 0xc9 in position 1: ordinal not in range(128)'''
问题查了,一般是字符之间转换的。但是到了库这里,就不懂了什么原因。。。。
小生愚钝,请教各位老师,请指点一二,麻烦了。

导入BeautifulSoup,它是正常的。下面是报错的具体信息。

PS :不是本专业的,想学习一点计算机方面的。学个爬虫玩玩。英语比较菜。。。

Traceback (most recent call last):
  File "F:/untitled29/lianxi.py", line 5, in <module>
    import requests
  File "F:\Python27\lib\site-packages\requests\__init__.py", line 52, in <module>
    from .packages.urllib3.contrib import pyopenssl
  File "F:\Python27\lib\site-packages\requests\packages\urllib3\contrib\pyopenssl.py", line 47, in <module>
    from cryptography import x509
  File "F:\Python27\lib\site-packages\cryptography\x509\__init__.py", line 7, in <module>
    from cryptography.x509.base import (
  File "F:\Python27\lib\site-packages\cryptography\x509\base.py", line 16, in <module>
    from cryptography.x509.extensions import Extension, ExtensionType
  File "F:\Python27\lib\site-packages\cryptography\x509\extensions.py", line 14, in <module>
    from asn1crypto.keys import PublicKeyInfo
  File "F:\Python27\lib\site-packages\asn1crypto\keys.py", line 22, in <module>
    from ._elliptic_curve import (
  File "F:\Python27\lib\site-packages\asn1crypto\_elliptic_curve.py", line 51, in <module>
    from ._int import inverse_mod
  File "F:\Python27\lib\site-packages\asn1crypto\_int.py", line 56, in <module>
    from ._perf._big_num_ctypes import libcrypto
  File "F:\Python27\lib\site-packages\asn1crypto\_perf\_big_num_ctypes.py", line 31, in <module>
    libcrypto_path = find_library('crypto')
  File "F:\Python27\lib\ctypes\util.py", line 51, in find_library
    fname = os.path.join(directory, name)
  File "F:\Python27\lib\ntpath.py", line 85, in join
    result_path = result_path + p_path
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc9 in position 1: ordinal not in range(128)
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

모든 응답(5)
Ty80

그저 놀고 싶다면 Python3을 직접 사용하는 것을 고려할 수 있습니다. Python2와 비교할 때 Python3은 문자 인코딩 문제가 훨씬 적습니다.

阿神

오류 메시지를 보면 lanxi.py의 인코딩 형식에 문제가 있을 것입니다. 먼저 cmd 콘솔로 이동하여 Python을 실행한 다음 가져오기를 시도하면 됩니다.

大家讲道理

SSL 암호화 기능 패키지의 폴더 경로에 특수문자가 있습니다

py3, 2로 변경하면 항상 다양한 코딩 문제가 발생합니다

小葫芦

으아아아

인쇄하여 이 코드의 변수에 중국어 문자가 있는지 확인하거나 모두 유니코드 형식으로 저장할 수 있습니다

으아아아
巴扎黑

UnicodeDecodeError은 문자 디코딩이 실패하는 이유입니다. 이는 requests만의 문제도 아니고, python만의 문제도 아닙니다. , 문자 인코딩을 이해해야 합니다. 정보를 얻기 위해 특정 문자 인코딩을 쿼리할 수 있습니다. 아래 py2의 문자 인코딩 문제입니다.

py2 안에 따옴표로 선언된 문자열 유형은 모두 str이고, 문자열 앞에 u로 선언된 문자열 유형은 unicode입니다. 네트워크 IO에서 전송되는 문자와 파일 읽기 및 쓰기는 모두 바이트, 즉 str 형식으로 인코딩됩니다. 계산을 수행하기 위해 컴퓨터에 로드하면 일반적으로 unicode로 디코딩됩니다. py2의 str 메소드는 실제로 ''.encode('ascii')이고, unicode 메소드는 ''.decode('ascii')

입니다. 으아악

ss = '你好'ascii이 아닌 문자이기 때문에 ascii 방식으로 디코딩하면 실패합니다. utf-8gbk로 디코딩하면 성공합니다. 마찬가지로 s=u'你好'ascii로 인코딩할 수 없습니다.

위의 질문은 ascii 문자가 아닌 문자에 관한 것이어야 하며, decodeascii 문자가 되면 오류가 발생합니다. result_path + p_path 즉, 다음 두 변수 중 하나는 ascii이 아닌 문자를 포함하는 str 유형입니다.

으아악

'你好'의 한자는 ascii 문자가 아닙니다. 유니코드 문자로 이어붙이면 유니코드로 디코딩된 후 이어집니다. 마지막 예인 '你好' + u'world'는 실제로 '你好'.decode('ascii') + u'world'을 실행합니다. 그래서 오류가 보고됩니다.

수정 방법은 매우 간단합니다. 통합 문자 인코딩을 사용하면 됩니다. Linux에서 py의 기본 인코딩은 utf-8이고 win에서는 gbk인 것 같습니다. 어쨌든 utf-8을 사용하십시오.

으아악

py3에서는 따옴표로 선언된 모든 문자열이 유니코드입니다. str, unicode 두 가지 유형이 없습니다. 그 중 strbytes 타입으로 인코딩되고, bytes는 스트링 타입으로 디코딩된다. 둘 사이를 변환할 때 여전히 UnicodeDecodeError 문제가 있습니다. py3을 사용하면 모든 것이 괜찮을 것이라고 생각하지 마세요. 문제 해결의 핵심은 인코딩 및 디코딩 방법을 아는 것이며 한 번에 해결할 수 있습니다. 모두.

으아악
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿