我使用cmd Windows,chcp 65001,这是我的代码:
print u'\u0110 \u0110' + '\n'
结果:
(a character cmd can't display) (character what i want)
Traceback (most recent call last):
File "b.py", line 26, in <module>
print u'\u0110 \u0110'
IOError: [Errno 2] No such file or directory
但是,当我使用这段代码时:
print u' \u0110 \u0110' + '\n'
结果:
(a space)(charecter what i want) (character what i want)
Traceback (most recent call last):
File "b.py", line 26, in <module>
print u' \u0110 \u0110' + '\n'
IOError: [Errno 2] No such file or directory
我的屏幕:
我的问题是:
为什么python 2.7在打印unicode字符时需要空格?
如何修复IOError:[Errno 2]
答案 0 :(得分:5)
在Windows上,您可以使用print
打印任意字符串(只要字体可以显示字符)。只需print
Unicode并配置您的环境。
例如,print_unicode.py
:
#!/usr/bin/env python
print(u'\u0110\u0110')
要打印到Windows控制台,您可以使用win-unicode-console
package:
T:\> py -mpip install win-unicode-console
T:\> py -mrun print_unicode.py
不要忘记配置适当的控制台字体。在这种情况下,chcp
返回值无关紧要。
您可以call WriteConsoleW()
function (Unicode API) manually将任意文本打印到Windows控制台。
您不需要第三方模块,将输出重定向到文件:
T:\> set PYTHONIOENCODING=utf-8
T:\> py print_unicode.py >output-utf-8.txt
注意:未使用run
模块。它适用于Python 2和3。
如果您不需要打印非BMP Unicode字符,那么您可以使用stdlib中的Python IDLE,例如,在Python 3中:
T:\> py -3 -midlelib -r print_unicode.py
IDLE也可以在Python 2上使用,但调用是不同的。
答案 1 :(得分:4)
在Windows上,您无法使用print
打印任意字符串。
有一些解决方法,如下所示:How to make python 3 print() utf8。但是,尽管有这个问题的标题,你不能使用它来实际使用代码页65001打印UTF-8,它将在完成后重复最后几个字节(正如我进一步描述的那样)
示例:
#! python2
import sys
enc = sys.stdout.encoding
def outputUnicode(t):
bytes = t.encode(enc, 'replace')
sys.stdout.write(bytes)
outputUnicode(u'The letter \u0110\n')
您可以使用chcp
将控制台的代码页更改为包含要打印字符的代码页。例如,运行chcp 852
。
如果我打印以下字符串,这些是我的框中的结果。我正在使用代码页850,这是英语系统的默认设置:
u"\u00abHello\u00bb" # "«Hello»"
u"\u0110" # "Đ"
u"\u4f60\u597d" # "你好"
u"a\u2192b\u2192c" # "a→b→c"
第一个命令将起作用,因为所有字符都在代码页850中。接下来的3个将失败。
UnicodeEncodeError: 'charmap' codec can't encode character u'\u0110' in position 0: character maps to <undefined>
将代码页更改为852,第二个命令将起作用。
有一个UTF-8代码页(65001)但它不适用于python 2.7。
在python 3.4中,结果是一样的。如果您将代码页更改为65001,您将获得稍微减少的破坏行为。
\Python34\python.exe -c "print(u'a\u2192b\u2192c')"
a→b→c
�c
C:\>
两个额外字符( c)是Windows上C标准库中非标准行为的结果。它们是字符串的UTF-8编码中最后2个字节的重复。