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')
'Programing' 카테고리의 다른 글
MVC ASP.NET에서 HttpContext.Current와 Controller.Context의 차이점 (0) | 2020.10.30 |
---|---|
파이썬 에그 캐시 (PYTHON_EGG_CACHE) 란 무엇입니까? (0) | 2020.10.30 |
shared_ptr을 언제 사용하고 언제 원시 포인터를 사용합니까? (0) | 2020.10.30 |
왜 이것을 확인하십시오! = null? (0) | 2020.10.30 |
벡터의 마지막 n 개 요소를 가져옵니다. (0) | 2020.10.30 |