2011-03-05 4 views
-1

안녕하세요 날이 메시지를 디코딩 할 수 있습니다 무엇을 할 :이 python 오류 메시지를 어떻게 이해할 수 있습니까?

main.py", line 1278, in post 
    message.body = "%s %s/%s/%s" % (msg, host, ad.key().id(), slugify(ad.title.encode('utf-8'))) 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128) 

감사

UPDATE는 인코딩을 제거하려고하는 데이 작업 표시 전화 :

class Recommend(webapp.RequestHandler): 
    def post(self, key): 
     ad= db.get(db.Key(key)) 
     email = self.request.POST['tip_email']  
     host = os.environ.get("HTTP_HOST", os.environ["SERVER_NAME"]) 
     senderemail = users.get_current_user().email() if users.get_current_user() else '[email protected]' if host.endswith('.cl') else '[email protected]' if host.endswith('.mx') else '[email protected]' if host.endswith('.br') else '[email protected]' 
     message = mail.EmailMessage(sender=senderemail, subject="%s recommends %s" % (self.request.POST['tip_name'], ad.title)) 
     message.to = email 
     message.body = "%s %s/%s/%s" % (self.request.POST['tip_msg'],host,ad.key().id(),slugify(ad.title)) 
     message.send() 
     matched_images=ad.matched_images 
     count = matched_images.count() 
     if ad.text: 
      p = re.compile(r'(www[^ ]*|http://[^ ]*)') 
      text = p.sub(r'<a href="http://\1" rel="nofollow">\1</a>',ad.text.replace('http://','')) 
     else: 
      text = None 
     self.response.out.write("Message sent<br>") 
     path = os.path.join(os.path.dirname(__file__), 'market', 'market_ad_detail.html') 
     self.response.out.write(template.render(path, {'user_url':users.create_logout_url(self.request.uri) if users.get_current_user() else users.create_login_url(self.request.uri), 
     'user':users.get_current_user(), 'ad.user':ad.user,'count':count, 'ad':ad, 'matched_images': matched_images,})) 
+1

[UnicodeEncodeError : 'ascii'코덱이 u '\ xa3'문자를 인코딩 할 수 없습니다.] (http://stackoverflow.com/questions/3588083/unicodeencodeerror-ascii-codec-cant-encode-character-u) -xa3) – hop

+2

그 오류에 대해 SO 검색을하면 페이지와 페이지, 페이지 및 페이지와 페이지 및 페이지와 질문 및 답변 페이지 – hop

+0

정보 담당자에게 감사합니다 –

답변

1

같은 스크립트를 처리합니다.

여기에 일반 ASCII 문자열이 있기 때문에 파이썬 프린트를 '?' ASCII 문자가 아닌 문자열이있을 때 따라서 위의 예에서와 같은

"UNICODE STRING".encode('ascii','replace').decode('ascii') 

: 유니 코드 문자가 변수에

message.body = "%s %s/%s/%s" % \ 
    (msgencode('ascii','replace').decode('ascii'), 
    hostencode('ascii','replace').decode('ascii'), 
    ad.key().id()encode('ascii','replace').decode('ascii'), 
    slugify(ad.title)encode('ascii','replace').decode('ascii')) 

하거나 인 코드/디코드.

그러나 이것은 최적의 솔루션이 아닙니다. 가장 좋은 아이디어는 message.body을 유니 코드 문자열로 만드는 것입니다. 그게 현실적으로 불가능한 것 같아요. GAE에 익숙하지 않아서, 적어도 오류가 없도록 이것을 사용할 수 있습니다.

+0

OK! 내가한다. 그것을 조사해 주셔서 고마워요. –

+1

예, 완벽하게 실현 가능합니다. db.StringProperty 또는 db.TextProperty를 사용하십시오. 정말로, 모든 유니 코드 문자를 물음표로 대체해서는 안됩니다. 우리는 20 세기에 살고 있습니다. 사람들은 유니 코드를 사용합니다. –

1

가지고있어 당신이 가정하지 않는 곳에서 유니 코드 문자. 대부분이 오류는 MS Word 스타일의 따옴표가있는 것으로 나타났습니다.

+0

코드 또는 입력에서? 코드에서 말한 것 같아요. –

1

이러한 필드 중 하나에는 인코딩 할 수없는 몇 가지 문자가 있습니다. 파이썬 3 (더 나은 유니 코드 지원)로 전환하거나 문제가 멈추는 전체 스크립트의 인코딩을 변경하면 2.x의 인코딩을 변경하는 가장 좋은 방법은 인코딩 주석 줄을 사용하는 것입니다. http://evanjones.ca/python-utf8.html이 표시되면 utf-8 지원과 함께 Python을 사용하는 것에 대한 더 많은 설명이 표시됩니다. 가장 좋은 제안은 # -*- coding: utf-8 -*-을 스크립트 맨 위에 추가하는 것입니다. 만 ASCII 텍스트를 원하지만 당신은 그것을 유니 코드로 인코딩 된 문자열을 제공하기 위해 노력하고 문제는 여기 기본 모델 (message.body)는이

s = "hello normal string" 
u = unicode(s, "utf-8") 
backToBytes = u.encode("utf-8") 
+1

슬프게도, GAE [Python 3을 지원하지 않습니다] (http://code.google.com/p/googleappengine/issues/detail?id=909). –

+0

문제의 GAE에 주목했지만 대답을 변경하고 싶지 않았습니다. –

+1

실제로 소스 코드에 유니 코드 문자가있을 가능성은 매우 낮습니다. 따라서 소스 파일의 인코딩을 설정하는 것은 도움이되지 않습니다. 이 문제는 거의 확실하게 사용자가 UTF-8 입력을 가져 와서 '유니 코드'로 강제 변환하지 않고 'str'에 집어 넣음으로써 발생합니다. – geoffspear

0

Django norel 및 Google App Engine을 사용할 때 비슷한 문제가있었습니다.

문제는 응용 프로그램이있는 폴더에서 발생했습니다. 아마이 질문에 설명 된 문제는 아니지만 누군가가 나 같은 시간을 낭비하지 않도록 도움을 줄 수 있습니다.

먼저 응용 프로그램 폴더를/home /으로 변경하고 다시 실행 해보십시오. 작동하지 않으면 다른 것을 시도하십시오.

관련 문제