2011-12-19 33 views
7

Được rồi, tôi đã đọc qua nhiều câu hỏi tương tự và tôi tin rằng tôi đang theo đúng lời khuyên, nhưng bằng cách nào đó mã của tôi vẫn không hoạt động.UnicodeEncodeError: 'codec ascii' không thể mã hóa ký tự u ' u2019' ở vị trí 126: thứ tự không nằm trong phạm vi (128)

Tôi đã phân tích cú pháp tệp xml. Tôi đã đọc ở đây rằng đầu ra bây giờ là unicode. Tôi đang sử dụng các nhà văn csv để viết đầu ra cho một tập tin.

Vì vậy, trong mã của tôi, tôi đã cố gắng mã hóa trong utf-8 trước khi sử dụng tính năng viết. Tại sao tôi vẫn gặp lỗi khi viết bài? Cảnh báo của tôi, "unicode !!!" không bị ném cho đến khi lỗi này xảy ra (tôi đang chạy trên nhiều tệp và nó hoạt động được nhiều nhất). Thực ra, mặc dù, tôi không hiểu tại sao nhà văn lại cố gắng sử dụng ascii, không nên hy vọng là utf-8? Tôi đã thay thế utf-8 bằng ascii trong chức năng mã hóa chỉ để đá. Cùng một kết quả. Hãy giúp tôi!!!

 try: 

      mystring=elem.find('./'+r2+'Description').text 


      if isinstance(mystring, unicode): 
       print("unicode!!!") 
       mystring.encode('utf-8','ignore') 
       datalist.append(mystring) 
      else:  
       datalist.append(mystring) 
     except AttributeError: 
      datalist.append('No text') 

     c.writerow(datalist) 
+1

"Tôi đã phân tích cú pháp một tệp xml. Tôi đã đọc ở đây rằng đầu ra bây giờ là unicode". Hiển thị cách bạn phân tích cú pháp XML. –

Trả lời

9

Khi bạn gọi mystring.encode(..., nó không thay đổi chuỗi tại chỗ; nó trả về một chuỗi mới.

+0

Chuỗi mới được gọi là gì? – user1106322

+0

Oh snap, mystring2 = mystring.encode (...) sau đó nối thêm các công thức mystring2! Cảm ơn! – user1106322

+0

Nó không được gọi là bất cứ điều gì; đó là một giá trị trả về. Lý do là (a) chuỗi (cả Unicode và chuỗi byte) là không thay đổi; (b) ngay cả khi chúng không, đó là hai loại khác nhau, do đó, một chuỗi Unicode không thể biến đổi thành một chuỗi byte được mã hóa tại chỗ. –

Các vấn đề liên quan