2012-07-07 20 views
5

Tôi đang làm việc với appengine python 2.5.UnicodeDecodeError: 'ascii' codec không thể giải mã byte 0xc3 ở vị trí 0: thứ tự không nằm trong phạm vi (128)

Tôi đang trải qua unicodedecoderror trên mã sau vì tên myuser đã sau giá trị

userName  = unicode(userName).encode('utf-8') # äºï¼égãwmj is value in this variable 

userName  = unicode(userName).encode('utf-8') 
strData = '{\"Sid\" :1, \"Oppid\" :%s, \"Aid\" :%s, \"EC\" :\"%s\", \"Name\" :\%s"' % (enemyID, userID, userEmpCode,userName) 


    params = {'deviceToken' : oDeviceToken, 
       'message'  : strMessage, 
       'CertificateId' : certificateId, 
       'Data'   : strData 
      } 


result = urlfetch.fetch(url = url, 
      payload = urllib.urlencode(params), 
      method = urlfetch.POST, 
      headers = {"Authorization" : authString}, 
      deadline = 30 
      ) 

tôi đang làm các bước sau đây vào tên người dùng để mã hóa nó thành utf-8 để tôi có thể gửi nó như là tải trọng.

username = unicode(username).encode(utf-8) 

tôi tin rằng các lỗi xảy ra khi tôi gọi urllib.urlencode(params)

Xin hướng dẫn những gì đang xảy ra sai .. hoặc bạn có thể ..

và những gì nên chiến lược cuối cùng để đối phó với chuỗi unicode trên appengine python ..

Tôi đã thử các giải pháp khác nhau đọc các chủ đề khác nhau .. nhưng vẫn không hoạt động

+0

Vui lòng cung cấp một stacktrace. Và có thể cố gắng tạo ra một ví dụ làm việc tối thiểu không sử dụng các biến được định nghĩa ở nơi khác. – oxc

Trả lời

7

Yo u're vấn đề có vẻ là bạn đang gọi unicode(userName) mà không có một mã hóa trên chuỗi đã được mã hóa của bạn, do đó, nó "mặc định để mã hóa chuỗi mặc định hiện tại", mà có vẻ là ascii trong trường hợp của bạn.

Bạn có thể không nên gọi unicode trong mọi trường hợp, nếu bạn biết đó là giá trị unicode, bạn đã ổn, nếu không, hãy gọi .decode với mã hóa chính xác.
Nếu bạn không chắc chắn, hãy thử sử dụng isinstance vì cố gắng giải mã một giá trị unicode sẽ dẫn đến một lỗi khác.

1

Tôi gặp sự cố tương tự khi chuyển mã Python 3 từ Ubuntu Linux 14.04 sang FreeBSD 10.3. Hệ thống thứ hai dường như sử dụng ASCII theo mặc định thay vì UTF-8 khi mở các tệp bằng Python 3.4.4.

Xác định encoding='utf-8' với lệnh tập tin open giải quyết vấn đề của tôi:

open('filepath', encoding='utf-8') 
Các vấn đề liên quan