2012-04-25 61 views
5

Possible Duplicate:
Python, Unicode, and the Windows console的Python:散发出一些UTF-8字符串Windows控制台

我从文件中读取一些字符串,当我尝试在Windows控制台打印这些UTF-8字符串,我得到错误

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

我试着控制台编码设置为UTF-8 “的chcp 65001” 但比我比收到此错误信息

LookupError: unknown encoding: cp65001 
+6

在Python 3.3中修复。 – 2012-04-25 18:31:34

+1

是否有一些python 2.7的解决方法? – Meloun 2012-04-25 18:37:10

+0

这个问题已经出现了几次。下面是一个解决方案的例子,可能会或可能无法正常工作:http://stackoverflow.com/questions/5419/python-unicode-and-the-windows-console – 2012-04-25 18:42:14

回答

3

我建议你检查一下stackoverflow上的类似问题,其中有很多。

无论如何,你可以这样来做:从文件

  1. 读任何编码(例如UTF-8),但解码字符串转换为Unicode
  2. for Windows控制台,输出的Unicode字符串。在这种特殊情况下,您不需要编码。您不需要设置控制台编码,输出文本将被自动正确编码。

对于文件,您需要使用编解码器模块或使用正确的编码进行编码。

+0

很好的建议,但应该指出的是,如果你期望在控制台上有多种语言支持,这将不会提供它。 – 2012-04-30 14:42:52

+0

这确实对你有用吗?甚至在我读取文件的第一个字节之前,我得到了'LookupError:unknown encoding:cp65001'。这似乎与字符串内容完全无关。就好像Python会缺乏对'cp65001'的理解一样,但是尽可能地尝试这种方式,除非你解决它或者使用python 3.3,否则这是行不通的,如果我不得不猜测的话。 – n611x007 2015-09-08 08:55:47

+1

@naxa是的,python不理解cp65001。不要chcp到65001.或者至少在调用python之前使用'set PYTHONIOENCODING = utf-8'。另请参阅https://stackoverflow.com/questions/878972/windows-cmd-encoding-change-causes-python-crash – Jiri 2015-09-08 10:11:20

1

打印命令尝试将Unicode字符串转换为控制台支持的编码。请尝试:

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

它显示了控制台支持的编码(告诉Python被支持的内容)。如果字符无法转换为该编码,则无法正确显示它。