2012-04-25 33 views
5

Possible Duplicate:
Python, Unicode, and the Windows consolePython: Phát ra một số UTF-8 chuỗi các cửa sổ giao diện điều khiển

Tôi đọc một số chuỗi từ tập tin và khi tôi cố gắng để in những chuỗi utf-8 trong cửa sổ giao diện điều khiển, tôi nhận được lỗi

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal not in range(128) 

tôi đã cố gắng để thiết lập giao diện điều khiển mã hóa để utf-8 với "65001 chcp" Nhưng hơn tôi hơn nhận được thông báo lỗi này

LookupError: unknown encoding: cp65001 
+6

Cố định bằng Python 3.3. –

+1

có giải pháp nào cho python 2.7 không? – Meloun

+0

Câu hỏi này đã xuất hiện một vài lần. Dưới đây là một ví dụ về cách khắc phục có thể có hoặc không hoạt động: http://stackoverflow.com/questions/5419/python-unicode-and-the-windows-console –

Trả lời

3

Tôi khuyên bạn nên kiểm tra các câu hỏi tương tự trên stackoverflow, có rất nhiều câu hỏi.

Dù sao, bạn có thể làm theo cách này:

  1. đọc từ tập tin trong bất kỳ mã hóa (ví dụ utf8) nhưng decode chuỗi Unicode
  2. cho các cửa sổ giao diện điều khiển, sản lượng unicode chuỗi. Bạn không cần phải mã hóa trong trường hợp đặc biệt này. Bạn không cần phải đặt mã hóa bảng điều khiển, văn bản đầu ra sẽ được mã hóa tự động một cách chính xác.

Đối với tệp, bạn cần sử dụng mô-đun codec hoặc mã hóa mã hóa thích hợp.

+0

Lời khuyên tốt, nhưng cần lưu ý rằng nếu bạn đang mong đợi hỗ trợ nhiều ngôn ngữ trên bàn điều khiển, điều này sẽ không cung cấp. –

+0

điều này thực sự có hiệu quả với bạn không? Tôi nhận được 'LookupError: mã hóa không xác định: cp65001' ngay cả trước khi tôi đọc byte đầu tiên từ tệp. Nó có vẻ hoàn toàn không liên quan đến nội dung chuỗi. Nó là như Python sẽ thiếu sự hiểu biết của 'cp65001' nhưng thử cách đó tuy nhiên, và điều này sẽ không bao giờ làm việc trừ khi bạn làm việc xung quanh nó hoặc sử dụng python 3.3, nếu tôi đã đoán. – n611x007

+1

@naxa Yeah, python không hiểu cp65001. Đừng chcp đến 65001. Hoặc ít nhất hãy sử dụng 'set PYTHONIOENCODING = utf-8' trước khi gọi python. Xem thêm https://stackoverflow.com/questions/878972/windows-cmd-encoding-change-causes-python-crash – Jiri

1

Lệnh in cố gắng chuyển đổi chuỗi Unicode thành mã hóa được bảng điều khiển hỗ trợ. Hãy thử:

>>> import sys 
>>> sys.stdout.encoding 
'cp852' 

Nó cho bạn biết mã hóa bảng điều khiển hỗ trợ (những gì được thông báo cho Python được hỗ trợ). Nếu ký tự không thể được chuyển đổi sang mã hóa đó, không có cách nào để hiển thị nó một cách chính xác.

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