[PYTHON] 인코딩은 "ascii"코덱이 문자를 인코딩 할 수 없음을 나타냅니다. 서수는 범위에 없습니다 (128) "
PYTHON인코딩은 "ascii"코덱이 문자를 인코딩 할 수 없음을 나타냅니다. 서수는 범위에 없습니다 (128) "
나는 Django RSS 리더 프로젝트를 통해 여기서 일하고있다.
RSS 피드는 "OKLAHOMA CITY (AP) - James Harden let"과 같은 것을 읽을 것입니다. RSS 피드의 인코딩은 encoding = "UTF-8"을 읽으므로 utf-8을 아래 코드 스 니펫의 markdown에 전달합니다. em 대시는 그것이 질식하는 곳입니다.
나는 "ascii"코덱의 Django 오류는 UnicodeEncodeError 인 위치 109 (ordinal not in range (128))에 U '\ u2014'문자를 인코딩 할 수 없습니다. 전달되는 변수에서 "OKLAHOMA CITY (AP) \ u2014 James Harden"을 봅니다. 작동하지 않는 코드 행은 다음과 같습니다.
content = content.encode(parsed_feed.encoding, "xmlcharrefreplace")
나는 markdown 2.0, django 1.1 및 python 2.4를 사용하고 있습니다.
이 작업을 수행하기 위해 수행해야하는 인코딩 및 디코딩의 마법 순서는 무엇입니까?
(Prometheus의 요청에 따라 서식이 도움이된다는 것에 동의 함)
그래서보기에서 나는 parsed_feed 인코딩 라인 위에 smart_unicode 라인을 추가합니다 ...
content = smart_unicode(content, encoding='utf-8', strings_only=False, errors='strict')
content = content = content.encode(parsed_feed.encoding, "xmlcharrefreplace")
이것은 내 model.py에 문제를 푸시한다.
def save(self, force_insert=False, force_update=False):
if self.excerpt:
self.excerpt_html = markdown(self.excerpt)
# super save after this
저장 방법을 변경하면 ...
def save(self, force_insert=False, force_update=False):
if self.excerpt:
encoded_excerpt_html = (self.excerpt).encode('utf-8')
self.excerpt_html = markdown(encoded_excerpt_html)
" 'ascii'코덱은 141 바이트 위치의 바이트 0xe2를 디코딩 할 수 없습니다. 서수가 있던 위치에"\ xe2 \ x80 \ x94 "가 있기 때문에 범위가 아닌 서수 (128)가됩니다.
해결법
-
==============================
1.실제로 수신하는 데이터가 UTF-8로 인코딩 된 경우 Python 2.x에서 Python의 'str'객체 인 바이트 시퀀스 여야합니다.
실제로 수신하는 데이터가 UTF-8로 인코딩 된 경우 Python 2.x에서 Python의 'str'객체 인 바이트 시퀀스 여야합니다.
다음과 같이 어설 션으로이를 확인할 수 있습니다.
assert isinstance(content, str)
그 사실을 알게되면 실제 인코딩으로 이동할 수 있습니다. 파이썬은 트랜스 코딩을하지 않습니다. 예를 들어, UTF-8에서 ASCII로 직접 변환합니다. 먼저 바이트 시퀀스를 디코드하여 유니 코드 문자열로 변환해야합니다.
unicode_content = content.decode('utf-8')
(parsed_feed.encoding을 신뢰할 수있는 경우 리터럴 'utf-8'대신 해당 문자를 사용하십시오. 어느 쪽이든 오류를 대비하십시오.)
그런 다음 해당 문자열을 가져 와서 ASCII로 인코딩하여 높은 문자를 해당 XML 엔티티로 대체 할 수 있습니다.
xml_content = unicode_content.encode('ascii', 'xmlcharrefreplace')
전체 방법은 다음과 같습니다.
try: content = content.decode(parsed_feed.encoding).encode('ascii', 'xmlcharrefreplace') except UnicodeDecodeError: # Couldn't decode the incoming string -- possibly not encoded in utf-8 # Do something here to report the error
-
==============================
2.Django는 Unicode와 bytestrings 사이에서 앞뒤로 변환하기위한 몇 가지 유용한 함수를 제공합니다 :
Django는 Unicode와 bytestrings 사이에서 앞뒤로 변환하기위한 몇 가지 유용한 함수를 제공합니다 :
-
==============================
3.zip 파일로 파일 이름을 쓰는 동안이 오류가 발생했습니다. 다음은 실패했습니다.
zip 파일로 파일 이름을 쓰는 동안이 오류가 발생했습니다. 다음은 실패했습니다.
ZipFile.write(root+'/%s'%file, newRoot + '/%s'%file)
그리고 다음은 작동했습니다.
ZipFile.write(str(root+'/%s'%file), str(newRoot + '/%s'%file))
from https://stackoverflow.com/questions/2513027/encoding-gives-ascii-codec-cant-encode-character-ordinal-not-in-range128 by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 프로그램을 실행하면 Tkinter 버튼 명령이 활성화됩니까? (0) | 2018.11.24 |
---|---|
[PYTHON] 부스트 파이썬 안녕 프로그램에서 가져 오기 오류 (0) | 2018.11.24 |
[PYTHON] 디렉토리의 파일 이름을 오름차순으로 정렬 [duplicate] (0) | 2018.11.24 |
[PYTHON] QWidget 배경색을 설정하는 방법? (0) | 2018.11.24 |
[PYTHON] int 객체는 반복 가능하지 않습니까? (0) | 2018.11.24 |