IT

UnicodeDecodeError : 'ascii'코덱은 위치 2에서 0xd1 바이트를 사용할 수 없습니다. 서 수가 범위에 없습니다 (128).

lottoking 2020. 8. 27. 21:44
반응형

UnicodeDecodeError : 'ascii'코덱은 위치 2에서 0xd1 바이트를 사용할 수 없습니다. 서 수가 범위에 없습니다 (128).


비표준 문자가 포함 된 매우 큰 데이터 세트로 작업합니다. 작업 사양에 따라 유니 코드를하지만 당황합니다. (그리고 아마도 모든 것을 잘못하고 있습니다.)

다음을 사용하여 CSV를 여러 다.

 15     ncesReader = csv.reader(open('geocoded_output.csv', 'rb'), delimiter='\t', quotechar='"')

그런 다음 다음으로 인코딩을 시도합니다.

name=school_name.encode('utf-8'), street=row[9].encode('utf-8'), city=row[10].encode('utf-8'), state=row[11].encode('utf-8'), zip5=row[12], zip4=row[13],county=row[25].encode('utf-8'), lat=row[22], lng=row[23])

API로 보내야하기 때문에 모든 것을 인코딩하고 있습니다. 프로그램을 실행하여 데이터 세트를 내가 사용할 수있는 명령어 구문 분석하면 다음과 같은 Traceback이 표시됩니다.

Traceback (most recent call last):
  File "push_into_db.py", line 80, in <module>
    main()
  File "push_into_db.py", line 74, in main
    district_map = buildDistrictSchoolMap()
  File "push_into_db.py", line 32, in buildDistrictSchoolMap
    county=row[25].encode('utf-8'), lat=row[22], lng=row[23])
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd1 in position 2: ordinal not in range(128)

python 2.7.2를 사용하고 있으며 django 1.4에서 앱 빌드의 일부라고 말해야한다고 생각합니다. 이 주제에 대한 여러 게시물을 읽었습니다. 어떤 도움도 대단히 감사하겠습니다.

문제를 문제 일부 비표준 문자가 Ñ이고 가능하면 É인지 알고 싶을 수도 있습니다.


유니 코드는 UTF-8과 같지 않습니다. 후자는 전자의 인코딩 일뿐 입니다.

당신은 잘못된 방식으로 있습니다. 은된다 당신 읽는 UTF-8 인코딩 이 필요하므로,를 데이터 디코딩 유니 코드 문자열로 UTF-8 인코딩 된 문자열.

그러니 그냥 교체 .encode와 함께 .decode, 작동해야합니다 (.CSV 인 경우 UTF-8 인코딩).

하지만 부끄러워 할 일은 없습니다. 프로그래머 5 명 중 3 명은 처음에는 쌓아 두는 사람이 있습니다.

업데이트 : 입력 데이터가 UTF-8로 인코딩 되지 않은.decode()에는 물론 적절한 경우 인코딩 을 사용해야합니다 . 아무것도 주어지지 않는 python은 ASCII가 아닌 문자에서 반드시 실패하는 ASCII를 가정합니다.


다음 줄을 코드에 추가하십시오.

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

Python 3 사용자 용. 넌 할 수있어

with open(csv_name_here, 'r', encoding="utf-8") as f:
    #some codes

작동 작동합니다. :)


오류의 주된 이유는 python이 가정하는 기본 인코딩이 ASCII이기 때문입니다. 인코딩 된 인코딩 데이터 encode('utf8')에 ASCII 범위 밖에있는 문자 (예 : 'hgvcj 터 파크 387'과 같은 것)가 포함 된 인코딩 형식이 아니기 때문에 오류가 발생합니다.

버전 3.5 이전의 python 버전을 사용하는 경우 수정은 python이 가정하는 기본 인코딩을 다음과 같이 설정하는 것입니다 utf8.

import sys
reload(sys)
sys.setdefaultencoding('utf8')
name = school_name.encode('utf8')

이런 식으로 기능은 ASCII 범위를 벗어나는 것입니다.

단, 표준 버전 3.5 이상을 사용하는 경우 reload () 함수를 사용할 수있는 디코드를 수정해야합니다.

name = school_name.decode('utf8').encode('utf8')

Python 3 사용자의 경우 :

인코딩을 'ascii'에서 'latin1'로 변경하면 작동합니다.

또한 아래 스 니펫을 사용하여 상위 10000 바이트를 읽어 인코딩을 자동으로 사용할 수 있습니다.

import chardet  
with open("dataset_path", 'rb') as rawdata:  
            result = chardet.detect(rawdata.read(10000))  
print(result)

인증서를 생성하고 사용하는 동안 certbot을 실행하는 동안이 문제가 발생하면 다음 방법을하십시오.

grep -r -P '[^\x00-\x7f]' /etc/apache2 /etc/letsencrypt /etc/nginx

이 명령은 주석의 한 .conf 파일에서 문제가되는 문자 "´"를 찾았습니다. 그것을 제거하고 (원하는대로 주석을 편집 할 수 있음) nginx를 다시로드하면 모든 것이 다시 작동했습니다.

출처 : https://github.com/certbot/certbot/issues/5236


위도 및 경도 때문에 UTF 16 인코딩으로 열립니다. open (csv_name_here, 'r', encoding = "utf-16")을 f로 사용 :

참고 URL : https://stackoverflow.com/questions/10406135/unicodedecodeerror-ascii-codec-cant-decode-byte-0xd1-in-position-2-ordinal

반응형