Python 유니 코드 인코딩 오류
Amazon XML 파일을 읽고 구문 분석 중이며 XML 파일에 '가 표시되는 동안 인쇄하려고하면 다음 오류가 발생합니다.
'ascii' codec can't encode character u'\u2019' in position 16: ordinal not in range(128)
지금까지 온라인에서 읽은 내용에서 오류는 XML 파일이 UTF-8로되어 있지만 Python은이를 ASCII 인코딩 문자로 처리하려고합니다. 오류를 없애고 프로그램이 읽는대로 XML을 인쇄하도록하는 간단한 방법이 있습니까?
아마도 문제는 당신이 그것을 잘 파싱했고 이제 당신은 XML의 내용을 인쇄하려고하는데 외국 유니 코드 문자가 있기 때문에 인쇄 할 수 없다는 것입니다. 먼저 유니 코드 문자열을 ascii로 인코딩하십시오.
unicodeData.encode('ascii', 'ignore')
'ignore'부분은 해당 문자를 건너 뛰도록 지시합니다. 파이썬 문서에서 :
>>> u = unichr(40960) + u'abcd' + unichr(1972)
>>> u.encode('utf-8')
'\xea\x80\x80abcd\xde\xb4'
>>> u.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
UnicodeEncodeError: 'ascii' codec can't encode character '\ua000' in position 0: ordinal not in range(128)
>>> u.encode('ascii', 'ignore')
'abcd'
>>> u.encode('ascii', 'replace')
'?abcd?'
>>> u.encode('ascii', 'xmlcharrefreplace')
'ꀀabcd޴'
http://www.joelonsoftware.com/articles/Unicode.html 이 기사를 읽고 싶을 수 있습니다.이 기사 는 진행 상황에 대한 기본 자습서로 매우 유용하다고 생각했습니다. 읽은 후에는 어떤 명령을 사용할지 (또는 적어도 나에게 일어난 일) 추측하는 것처럼 느껴지지 않을 것입니다.
더 나은 솔루션 :
if type(value) == str:
# Ignore errors even if the string is not proper UTF-8 or has
# broken marker bytes.
# Python built-in function unicode() can do this.
value = unicode(value, "utf-8", errors="ignore")
else:
# Assume the value object has proper __unicode__() method
value = unicode(value)
이유에 대해 자세히 알아 보려면 :
http://docs.plone.org/manage/troubleshooting/unicode.html#id1
스크립트 내에서 환경의 문자 인코딩을 하드 코딩하지 마십시오. 대신 유니 코드 텍스트를 직접 인쇄합니다.
assert isinstance(text, unicode) # or str on Python 3
print(text)
출력이 파일 (또는 파이프)로 리디렉션되는 경우 PYTHONIOENCODING
envvar를 사용하여 문자 인코딩을 지정할 수 있습니다 .
$ PYTHONIOENCODING=utf-8 python your_script.py >output.utf8
그렇지 않으면, python your_script.py
같은 작업을해야하는 것입니다 - 로케일 설정은 텍스트를 인코딩하는 데 사용된다 (POSIX 검사에 : LC_ALL
, LC_CTYPE
, LANG
envvars - 설정 LANG
수정 UTF-8 로케일에 필요한 경우).
Windows에서 유니 코드를 인쇄하려면 Windows 콘솔, 파일 또는 IDLE을 사용하여 유니 코드를 인쇄하는 방법을 보여주는이 답변을 참조하십시오 .
우수 게시물 : http://www.carlosble.com/2010/12/understanding-python-and-unicode/
# -*- coding: utf-8 -*-
def __if_number_get_string(number):
converted_str = number
if isinstance(number, int) or \
isinstance(number, float):
converted_str = str(number)
return converted_str
def get_unicode(strOrUnicode, encoding='utf-8'):
strOrUnicode = __if_number_get_string(strOrUnicode)
if isinstance(strOrUnicode, unicode):
return strOrUnicode
return unicode(strOrUnicode, encoding, errors='ignore')
def get_string(strOrUnicode, encoding='utf-8'):
strOrUnicode = __if_number_get_string(strOrUnicode)
if isinstance(strOrUnicode, unicode):
return strOrUnicode.encode(encoding)
return strOrUnicode
다음과 같은 형식을 사용할 수 있습니다.
s.decode('utf-8')
UTF-8로 인코딩 된 바이트 문자열을 Python 유니 코드 문자열로 변환합니다. 그러나 사용할 정확한 절차는 XML 파일을로드하고 구문 분석하는 방법에 따라 다릅니다. 예를 들어 XML 문자열에 직접 액세스하지 않는 경우 codecs
모듈 에서 디코더 객체를 사용해야 할 수 있습니다 .
I wrote the following to fix the nuisance non-ascii quotes and force conversion to something usable.
unicodeToAsciiMap = {u'\u2019':"'", u'\u2018':"`", }
def unicodeToAscii(inStr):
try:
return str(inStr)
except:
pass
outStr = ""
for i in inStr:
try:
outStr = outStr + str(i)
except:
if unicodeToAsciiMap.has_key(i):
outStr = outStr + unicodeToAsciiMap[i]
else:
try:
print "unicodeToAscii: add to map:", i, repr(i), "(encoded as _)"
except:
print "unicodeToAscii: unknown code (encoded as _)", repr(i)
outStr = outStr + "_"
return outStr
If you need to print an approximate representation of the string to the screen, rather than ignoring those nonprintable characters, please try unidecode
package here:
https://pypi.python.org/pypi/Unidecode
The explanation is found here:
https://www.tablix.org/~avian/blog/archives/2009/01/unicode_transliteration_in_python/
This is better than using the u.encode('ascii', 'ignore')
for a given string u
, and can save you from unnecessary headache if character precision is not what you are after, but still want to have human readability.
Wirawan
Try adding the following line at the top of your python script.
# _*_ coding:utf-8 _*_
Python 3.5, 2018
If you don't know what the encoding but the unicode parser is having issues you can open the file in Notepad++
and in the top bar select Encoding->Convert to ANSI
. Then you can write your python like this
with open('filepath', 'r', encoding='ANSI') as file:
for word in file.read().split():
print(word)
참고URL : https://stackoverflow.com/questions/3224268/python-unicode-encode-error
'programing tip' 카테고리의 다른 글
중첩 된 JSON 객체-모든 것에 배열을 사용해야합니까? (0) | 2020.08.19 |
---|---|
Gradle 작업-Java 애플리케이션에 인수 전달 (0) | 2020.08.19 |
IE9를 쿼크 모드로 전환하는 HTML5 doctype? (0) | 2020.08.19 |
DIV를 서로 겹쳐서 쌓으시겠습니까? (0) | 2020.08.19 |
ValueError를 발생시키는 방법? (0) | 2020.08.19 |