>  Q&A  >  본문

python 的requests问题

导入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)
迷茫迷茫2741일 전963

모든 응답(5)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-18 10:36:16

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

    회신하다
    0
  • 阿神

    阿神2017-04-18 10:36:16

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

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:36:16

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

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

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-18 10:36:16

    으아아아

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

    으아아아

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:36:16

    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을 사용하면 모든 것이 괜찮을 것이라고 생각하지 마세요. 문제 해결의 핵심은 인코딩 및 디코딩 방법을 아는 것이며 한 번에 해결할 수 있습니다. 모두.

    으아악

    회신하다
    0
  • 취소회신하다