이니고데렌코디로어: # 39, & # 39 ascii&. # 39, t # 39, \xa0& u& can& 코텍이 인코딩합니다 문자 # 39. 위치에 20: 서수 않는 범위 (128)

39 m, 유니코드 문자를 다루는 문제가 i& 텍스트로 반입됨 다른 웹 페이지 (서로 다른 사이트). 보티풀소프 사용하고 있습니다.

문제는 항상 오류: 재현할 수 없습니다. 가끔 일부 페이지 및 it 수행됨 바프 이니고데렌코디로어 'a' 몸을 던지는 경우도 있습니다. 나도 날잡아 그냥 내가 생각할 수 있는 모든 일에 대해 아무 것도 찾지 못한 채 계속 사용할 수 있는, 그리고 난 니들이 던지기 함정이거나 유니코드 관련 오류:.

코드 중 단면에는 문제를 일으키는 아래와 같습니다.

agent_telno = agent.find('div', 'agent_contact_number')
agent_telno = '' if agent_telno is None else agent_telno.contents[0]
p.agent_info = str(agent_contact + ' ' + agent_telno).strip()

이것은 스택 추적 생산된 때 일부 문장열 스니핏 그들위에 실행됩니다.

Traceback (most recent call last):
  File "foobar.py", line 792, in <module>
    p.agent_info = str(agent_contact + ' ' + agent_telno).strip()
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)

이 때문에 일부 하는 의심이 페이지 (또는 좀 더 구체적으로, 페이지 에서 일부 사이트), 반면 다른 인코딩 안됨 인코딩되어 있을 수도 있을 수 있습니다. 영국에서 모든 사이트의 데이터를 기반으로 하고 있어 소비율에 제공하십시오 의미하는 영국 이외의 다른 언어로 작성된 텍스트 또는 국제화 관련된 문제가 없습니다 다루는 실행하십시오.

누구 수 있도록 지속적으로 이 문제를 해결할 수 있는 아이디어를 방법과 이 문제를 해결할 수 있을까?

질문에 대한 의견 (5)
해결책

You need to read 파이썬 [유니코드 따라하기 name] (https://docs.python.org/2.7/howto/unicode.html). 이 오류는 이 [매우 첫 번째 사례] (https://docs.python.org/2.7/howto/unicode.html # 유니코드 문자).

기본적으로 사용 중지 ',' 변환하십시오 str unicode 를 인코딩되지 text / 바이트입니다.

대신 적절히 사용하여 ['이니고데 ()'] (http://docs.python.org/library/stdtypes.html # 스트라이니고데) 인코드할 문자열.

p.agent_info = u' '.join((agent_contact, agent_telno)).encode('utf-8').strip()

또는 작동합니까 완전히 지시하는 기호이다.

해설 (18)

이는 클래식 파이썬 유니코드 문제점! 다음 사항을 고려해야 합니다.

a = u'bats\u00E0'
print a
 => batsà

모두 좋은 지금까지 str (a), # 39 의 지켜보리니 let& 신앙이니라 우리들은 어떻게 됩니까.

str(a)
Traceback (most recent call last):
  File "", line 1, in 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe0' in position 4: ordinal not in range(128)

오 딥, that& # 39 의 모든 좋은 사람이 하는 일은 없습니다! 오류를 해결하는, 명시적으로 사용할 수 있는 어떤 코텍이 이니고데 취해하고 python 이 바이트입니다 인코딩합니다.

a.encode('utf-8')
 => 'bats\xc3\xa0'
print a.encode('utf-8')
 => batsà

Voil\u00E0!

문제는 전화하시기 때 str () 는 기본 문자 인코딩, 파이썬, 이는 네 경우엔 제공한 인코딩합니다 시도하시려면 및 바이트 유니코드 문자를 표현을 경우도 있다. 이 문제를 해결하려면 할 수 있는 문자열 처리 방법을 사용하여 떠날려하면 파이썬 이니고데 (& # 39, whatever_unicode& # 39;) 주고 있습니다. 대부분의 경우 utf-8 사용하여 문제가 없어야 합니다.

이번 전시회에 대한 훌륭한 http://schmidt. devlib. 네드 Batchelder& # 39 의 파이컨 이 주제에 대해 말할 수 있습니다. http://nedbatchelder.com/text/unipain.html

해설 (4)

내가 찾은 가져다줄래요 계속 렉시한테서 문자열이 문자열을 지루려면 심볼에는 우아한 문제를 해결하려면 다음과 같다.

yourstring = yourstring.encode('ascii', 'ignore').decode('ascii')

39 을 사용하는 것이 중요한 it& 무시 옵션은 자동으로 알 수 있기 때문에 위험한 떨어트림 모든 유니코드 지원을 받아 사용하는 코드가 (및 인터내셔널리제이션) 이 알 수 있듯이 여기 (유니코드 변환):

>>> u'City: Malmö'.encode('ascii', 'ignore').decode('ascii')
'City: Malm'
해설 (4)

everything but 난 후 약 한 다음, 이를 통해 인터넷 검색 도움이 되지 않았다고 생각했어요. 파이썬 2.7 사용 중입니다.

# encoding=utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
해설 (8)

환경 변수 설정 문제를 겪고 있어 미묘한 인쇄할 수도, 실패할 수 잘못된 예. 여기 LC_ALL 설정되었습니다 C&quot ";). 데비안 그들은 설정값입니다 행위) 에 있다. 데비안 wiki 의 로케일에

$ echo $LANG
en_US.utf8
$ echo $LC_ALL 
C
$ python -c "print (u'voil\u00e0')"
Traceback (most recent call last):
  File "", line 1, in 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe0' in position 4: ordinal not in range(128)
$ export LC_ALL='en_US.utf8'
$ python -c "print (u'voil\u00e0')"
voilà
$ unset LC_ALL
$ python -c "print (u'voil\u00e0')"
voilà
해설 (2)

나에게 어떤 방법이 주효했는가 없었다.

BeautifulSoup(html_text,from_encoding="utf-8")

따라서 누군가가 바란다.

해설 (0)

39 건, 그냥 내 것으로 대부분의 arts), ve i& 실제로 이들 문자를 아웃해야 훨씬 간단합니다.

s = mystring.decode('ascii', 'ignore')
해설 (7)

문제는 you& 하고, 무릎은 doesn& 유니코드 문자 # 39, re 인쇄하려면 털미널 # 39, 이를 지원할 수 없다.

'그' 패키지 설치 언어팩의 en 해결하십시오 시도해 볼 수 있습니다.

sudo apt-get install language-pack-en

영어 번역이 지원되는 모든 패키지를 제공하는 데이터 업데이트 (파이썬 등). 필요한 경우 다른 언어 패키지 설치 (문자 # 39 인쇄하려면 you& 따라 하고, re).

39 에 대한 일부 리눅스 배포판에서 it& 위해 필요한 기본 영어 로켈은 설치 제대로 있는지 확인하기 위해 (따라서 유니코드 문자를 통해 처리할 수 있습니다 / 쉘로 털미널). 가끔 it& # 39 을 설치하려면 간소화하는지 configuring 것보다 직접.

그럼 언제 코드 작성, 오른쪽 코드에서 인코딩입니다 사용해야 합니다.

예를 들면 다음과 같습니다.

open(foo, encoding='utf-8')

39, ve you& 문제가 계속될 경우, 다음과 같은 두 번 시스템 구성을 확인합니다.

  • 사용자 로케일에 파일 ('기본' / etc / / 로케일에) 도 있어야 한다 (예:

LANG = &quot en_US.UTF-8"; LC_ALL = &quot en_US.UTF-8";

또는:

Utf-8 lc_all = c Utf-8 lang = c

  • 값 '랑' / 'LC_CTYPE' 에서 쉘입니다.
  • 당신의 쉘로 확인할 로케일에 汲摹窍妨绰 기준:

a 로케일에 그렙 &quot utf-8";

문제 및 솔루션 시연 신선한 vmo.

  1. 초기화하지 및 프로비저닝을 vmo (예를 들면 사용하여 '방랑자').

유랑하는 init ubuntu/trusty64. 유랑하는 up. 유랑하는 ssh

sup&gt &lt. (참조: support. unbuntu 사서함의 /sup&gt .<;).

  1. 인쇄면이 유니코드 문자 (like '상표 기호 등 ™'):

c $ & # 39, 파이썬, & # 39, 보기인쇄 (\u2122&quot u";) 역추적 (가장 최근 매입옵션 마지막): ,, 1 호선, 의 파일 &quot &lt string&gt &quot &lt module>; 이니고데렌코디로어: # 39, & # 39 ascii&. # 39, t # 39, \u2122& u& can& 코텍이 인코딩합니다 문자 # 39. 위치 0: 서수 않는 범위 (128)

  1. 이제 언어팩의 en '설치':

$ sudo apt 확보하십시오. install 언어팩의 en - y 다음 추가 패키지 설치됩니다. 언어팩의 en 기본 생성 로켈을. en_GB.UTF-8. /usr/sbin/locale-gen: 수행되 생성되었습니다.

  1. 이제 문제가 해결돼야:

c $ & # 39, 파이썬, & # 39, 보기인쇄 (\u2122&quot u";) ™

  1. 그렇지 않으면 다음 명령을 시도하시겠습니까.

$ LC_ALL = c - c & # 39, UTF-8 파이썬, & # 39, 보기인쇄 (\u2122&quot u";) ™

해설 (8)

시도하시겠습니까 해결할 수 있습니다,

# encoding=utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
해설 (4)

아래의 스크립트는 추가 맨 앞에 선 (또는 다음의 두 번째 행):

# -*- coding: utf-8 -*-

39 의 정의는 that& 파이썬 소스 코드 인코딩입니다. 자세한 정보 입력 [PEP 263] (https://www.python.org/dev/peps/pep-0263/).

해설 (1)

의 쉘로:

  1. Utf-8 에서 로케일에 찾습니다찾기 다음 명령을 실행하여:

a 로케일에 그렙 &quot utf-8";

  1. 정보기술 (it) 을 실행하기 전에 익스포트합니다 스크립트입니다, 예:

익스포트를 LC_ALL = $ (로케일에 - a 그렙 utf-8)

또는 수동으로 다음과 같습니다.

utf-8 익스포트를 LC_ALL = c

  1. 이를 통해 특수 문자, 예를 들어 '™' 인쇄면이 테스트:

파이썬 - c & # 39, & # 39 보기인쇄 (\u2122&quot u";;;

위 테스트됨 unbuntu 의.

해설 (0)

S # 39 의, 이른바 &quot 레이싱 here&, 일부 다른 경찰이 out&quot. 답변. 단순히 공을 멀리 가지 못하는 상황을 번거로움을 문자 / 문장열 불구하고 좋은 인프라일까요 솔루션이므로 목마르겠구나 반대 목소리를 높였다

def safeStr(obj):
    try: return str(obj)
    except UnicodeEncodeError:
        return obj.encode('ascii', 'ignore').decode('ascii')
    except: return ""

테스트 있다.

if __name__ == '__main__': 
    print safeStr( 1 ) 
    print safeStr( "test" ) 
    print u'98\xb0'
    print safeStr( u'98\xb0' )

결과:

1
test
98°
98

제안: 이 기능을 이름을 붙일 수 있습니다 '대신' 트로이시리? # 39 의 that& 것은 기본.

  • 이 위해 작성된 파이썬 2.* you& # 39 의 파이썬 3, I believe, ll want to use '바이트입니다 (,, &quot ascii&quot obj)' 보다는 'str (목표)'. 난 아직 didn& # 39, t, but I will 어느 시점에서 이 테스트 및 개정합니다 해답이야
해설 (0)

난 항상 첫 번째 두 줄의 동일팔레트에 아래 코드는 파이썬 파일:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
해설 (0)

단순 보조 기능을 늑대굴에서 here.

def safe_unicode(obj, *args):
    """ return the unicode representation of obj """
    try:
        return unicode(obj, *args)
    except UnicodeDecodeError:
        # obj is byte string
        ascii_text = str(obj).encode('string_escape')
        return unicode(ascii_text)

def safe_str(obj):
    """ return the byte string representation of obj """
    try:
        return str(obj)
    except UnicodeEncodeError:
        # obj is unicode
        return unicode(obj).encode('unicode_escape')
해설 (2)

추가하기만 인코딩합니다 (& # 39, utf-8& # 39;) 를 변수

agent_contact.encode('utf-8')
해설 (0)

단말기 및 불지옥의 열어 주세요 아래 명령:

export LC_ALL="en_US.UTF-8"
해설 (0)

아래 솔루션이므로 추가한 협력했습니다 for me,

&gt. u &quot String";

내 앞에 문자열 (string 사이트용 유니코드로).

result_html = result.to_html(col_space=1, index=False, justify={'right'})

text = u"""


<p>
Hello all, <br>
<br>
Here's weekly summary report.  Let me know if you have any questions. <br>
<br>
Data Summary <br>
<br>
<br>
{0}
</p>
<p>Thanks,</p>
<p>Data Team</p>

""".format(result_html)
해설 (0)

그냥 함께사용할 다음과 같습니다.

import unicodedata
message = unicodedata.normalize("NFKD", message)

이에 대해 확인하는 문서를 말한다.

&gt. 반품하십시오 이니고데다타오노마리즈 (양식, 어니스트) 형식의 역사 &gt. 유니코드 문자열을 어니스트. 유효값 양식 are "NFC", "노프크스" &gt. "노프트" 및 "노프리드." &gt. &gt. 유니코드 표준에 eventtest 다양한 형태의 유니코드 정규화 &gt. 문자열 정의를 바탕으로 정식 대등을 및 &gt. 호환성에서는 대등을. 유니코드 문자를 사용할 수 있는 몇 가지 &gt. 다양한 방식으로 표현했다. 예를 들어, U + 00C7 (라틴 문자 &gt. E0100042.log 대문자 C 에 세디유) 로 표현할 수도 있습니다. &gt. U + 0043 (라틴 대문자 C) U + 0327 (결합 세디유). &gt. &gt. 각 문자에 대한 두 가지 일반 양식: c 와 역사 &gt. 역사 D. 역사 깊은 번호라고도 ᄃ씨 (노프트) &gt. 분해 및 각 문자를 구체화합니다 악취가 양식을 채택하고 있습니다. &gt. C (NFC) 분해 후 정규 첫 번째 qic 역사 &gt. 다시 사전 결합됨 구성되어있으며, 그 문자. &gt. &gt. 이와 같은 두 형태, 두 가지 일반 양식 &gt. 호환성에서는 기반으로 동등성의. 일부 문자는 유니코드 에서 &gt. 일반적으로 다른 캐릭터와 함께 사용할 수 있는 통합 될 것 "이라고 말했다. 대한 &gt. 예, U + 2160 (로마 숫자 1) 는 정말 똑같은 0049 로 U + &gt. (라틴 대문자 I). 그러나 대한 유니코드로 지원됩니다. &gt. 기존의 문자 집합 (예를 들어 gb2312) 와의 호환성. &gt. &gt. 일반 양식 KD (노프리드) 가 적용하십시오 호환성에서는 분해, &gt. 즉, 모든 호환성에서는 대체하십시오 캐릭터와 그들의 산정한다. 이 &gt. kc (노프크스) 를 먼저 호환성을 qic 분해, 역사 &gt. 그 뒤를 이어 정식 컴포지션입니다. &gt. &gt. 유니코드 문자열을 경우에도 동일하게 정상화 및 두 수 있다. &gt. 이 경우, 다른 사람의 판독기에서 문자와 결합한 싫어하겠어 &gt. 그들은 비교해서 같을 수 없습니다.

해결할 수 있는 it for me. 쉽고 간단한.

해설 (0)

우리는 '장고' (manage.py) 에서 실행할 때 이 오류가 발생 마이그레이션합니다 관찰지역 함께 선정되었다.

- - 우리 들어 '소스 코드: utf-8 은 - - 위해 구성된 '선언, MySQL 의 값을 제대로 경식도 unbuntu utf8 및 적절한 언어팩의 / etc / 기본 / 로케일에' 및 '.

이 문제는 단순히 '랑' 놓치고 있는 것은 장고 컨테이너입니다 (우리가 사용하는 부두 노동자) 는 env var.

'와' 설정 '랑' 을 en_US.UTF-8 재시작하기 컨테이너입니다 재실행 마이그레이션과 전에 문제가 해결되었습니다.

해설 (0)
  • 이 은 파이썬 least.* 있었느뇨 라고 3 일

  • 파이썬 3*

그래서 가끔 있는 환경 변수 및 니콘딩 오류:

import os
import locale
os.environ["PYTHONIOENCODING"] = "utf-8"
myLocale=locale.setlocale(category=locale.LC_ALL, locale="en_GB.UTF-8")
... 
print(myText.encode('utf-8', errors='ignore'))

여기서 오류는 에서 무시됨 인코딩입니다.

해설 (0)