Programing

UnicodeEncodeError : 'ascii'코덱은 위치 3의 u '\ u2013'문자를 인코딩 할 수 없습니다. 2 : 서 수가 범위에 없습니다 (128).

lottogame 2020. 10. 30. 07:38
반응형

UnicodeEncodeError : 'ascii'코덱은 위치 3의 u '\ u2013'문자를 인코딩 할 수 없습니다. 2 : 서 수가 범위에 없습니다 (128).


xlrd를 사용하여 xsl 파일을 구문 분석하고 있습니다. 대부분의 일이 잘 작동합니다. 키가 문자열이고 값이 문자열 목록 인 사전이 있습니다. 모든 키와 값은 유니 코드입니다. str()방법을 사용하여 대부분의 키와 값을 인쇄 할 수 있습니다 . 그러나 일부 값에는 \u2013위의 오류가 발생 하는 유니 코드 문자 가 있습니다.

이것이 유니 코드에 포함 된 유니 코드이고 파이썬 인터프리터가 디코딩 할 수 없기 때문에 이런 일이 발생한다고 생각합니다. 그렇다면이 오류를 어떻게 제거 할 수 있습니까?

미리 감사드립니다.


유니 코드 객체도 인쇄 할 수 있으며 주위에 str ()을 수행 할 필요가 없습니다.

정말 str을 원한다고 가정합니다.

str (u '\ u2013') 할 때 유니 코드 문자열을 8 비트 문자열로 변환하려고합니다. 이를 위해서는 유니 코드 데이터와 8 비트 데이터 간의 매핑 인 인코딩을 사용해야합니다. str ()이하는 일은 파이썬 2에서 ASCII 인 시스템 기본 인코딩을 사용한다는 것입니다. ASCII에는 유니 코드의 첫 번째 코드 포인트 127 개 (\ u0000 ~ \ u007F1) 만 포함됩니다. 그 결과 위의 오류가 발생하고 ASCII 코덱은 \ u2013이 무엇인지 알지 못합니다 (긴 대시, btw).

따라서 사용할 인코딩을 지정해야합니다. 일반적인 것은 256 개의 첫 번째 코드 포인트를 포함하는 가장 일반적으로 Latin-1로 알려진 ISO-8859-1입니다. 가변 길이 인코딩을 사용하여 모든 코드 포인트를 인코딩 할 수있는 UTF-8, Windows에서 공통적 인 CP1252, 다양한 중국어 및 일본어 인코딩을 사용합니다.

다음과 같이 사용합니다.

u'\u2013'.encode('utf8')

결과는 해당 문자의 uTF8 표현 인 바이트 시퀀스를 포함하는 str입니다.

'\xe2\x80\x93'

다음과 같이 인쇄 할 수 있습니다.

>>> print '\xe2\x80\x93'

텍스트를 얻기 위해 이것을 시도 할 수도 있습니다.

foo.encode('ascii', 'ignore')

여기 str(u'\u2013')에 오류가 발생하므로 isinstance(foo,basestring)유니 코드 / 문자열을 확인 하는 사용 하고 기본 문자열 유형이 아닌 경우 유니 코드로 변환 한 다음 인코딩을 적용합니다.

if isinstance(foo,basestring):
    foo.encode('utf8')
else:
    unicode(foo).encode('utf8')

추가 읽기


나는 같은 문제가 있었다. 이것은 나를 위해 잘 작동합니다.

str(objdata).encode('utf-8')

나를 위해 이것은 작동합니다

unicode (데이터) .encode ( 'utf-8')

참고 URL : https://stackoverflow.com/questions/5387895/unicodeencodeerror-ascii-codec-cant-encode-character-u-u2013-in-position-3

반응형