python 3.0,如何使print()输出unicode?

python 3.0,如何使print()输出unicode?,unicode,console,printing,python-3.x,stdout,Unicode,Console,Printing,Python 3.x,Stdout,我在WinXP 5.1.2600中工作,编写一个涉及汉语拼音的Python应用程序,这让我陷入了无尽的Unicode问题。切换到Python 3.0解决了许多问题。但是控制台输出的print()函数由于一些奇怪的原因不支持Unicode。这里有一个小节目 print('sys.stdout encoding is "' + sys.stdout.encoding + '"') str1 = 'lüelā' print(str1) 输出为(为了可读性,将尖括号更改为方括号): 不幸的是,“cod

我在WinXP 5.1.2600中工作,编写一个涉及汉语拼音的Python应用程序,这让我陷入了无尽的Unicode问题。切换到Python 3.0解决了许多问题。但是控制台输出的print()函数由于一些奇怪的原因不支持Unicode。这里有一个小节目

print('sys.stdout encoding is "' + sys.stdout.encoding + '"')
str1 = 'lüelā'
print(str1)
输出为(为了可读性,将尖括号更改为方括号):


不幸的是,“coding:”行指定的编码是源代码的编码,而不是控制台输出的编码。但是谢谢你的想法

Windows命令提示符(cmd.exe)无法显示您正在使用的Unicode字符,即使Python在内部以正确的方式处理它。您需要使用IDLE、Cygwin或其他能够正确显示Unicode的程序

有关完整说明,请参阅此线程:

查看问题和答案,我认为他们有一些有价值的线索。具体地说,请注意
sys
模块中的,但是您可能不应该使用它。

您可能需要尝试将环境变量“pythoniocodeding”更改为“utf_8”。我已经编写了一个

在Windows中用Python显示Unicode字符的问题是众所周知的。目前还没有正式的解决办法。正确的做法是使用winapi函数WriteConsoleW。构建一个有效的解决方案是非常重要的,因为还有其他相关的问题。然而,我开发了一个包,试图修复Python关于这个问题的问题。看见你也可以在那里阅读关于这个问题的更深入的解释。该软件包也在pypi()上,可以使用pip安装。

这里有一个肮脏的黑客攻击:

#有效
导入操作系统
操作系统(“chcp 65001&”)
印刷品(“印刷品”)
然而,一切都打破了它:

  • 简单静音第一行已经中断:

    #不起作用
    导入操作系统
    操作系统(“chcp 65001>nul&”)
    印刷品(“印刷品”)
    
  • 检查操作系统类型会破坏它:

    #不起作用
    导入操作系统
    如果os.name==“nt”:
    操作系统(“chcp 65001&”)
    印刷品(“印刷品”)
    
  • 在if块下它甚至不工作:

    #不起作用
    导入操作系统
    如果os.name==“nt”:
    操作系统(“chcp 65001&”)
    印刷品(“印刷品”)
    
但可以使用cmd的echo打印:

#有效
导入操作系统
操作系统(“CHCP65001&echo{0}”。格式(“ююбб”))
这里有一个简单的方法来实现这个跨平台:

#有效
导入操作系统
def简单交叉平面打印(obj):
如果os.name==“nt”:
操作系统(“chcp65001>nul&echo{0}”.format(obj))
其他:
打印(obj)
简单交叉平面印刷(“交叉印刷”)

但是窗口的
echo
尾随空行无法被抑制。

cmd.exe可以显示unicode字符,如果您使用的字体可以显示所需的unicode字符,并且如果您将代码页更改为utf-8(您可以使用:
CHCP 65001
),则无法可靠地工作。。。除了MSDN建议使用UTF-16之外,所有Windows NT操作系统的本机编码。@csde_rats他们不使用旧的固定宽度UCS-2而不是UTF-16吗?是和否。否和是。微软很早以前就使用了UCS-2,但后来改用了UTF-16。仍然有一些函数与UTF-16不兼容,尤其是在内核方面…upvote,
py-mpip安装win unicode console&py-mrun您的_脚本。py
是在Python 3上使用cmd.exe将unicode打印到Windows控制台的解决方案(确保您为控制台窗口配置了适当的字体).@J.F.Sebastian使用
run
现在被认为是次优的<代码>运行是在我不知道自定义读线挂钩时需要的
win\u unicode\u console.enable()
就足够了,它可以放在
sitecustomize
上,所以它会自动运行。然后您可以像往常一样运行脚本:
py your_script.py
。我不想在脚本中使用win unicode控制台代码(
py-mrun
允许我这样做)。我经常在Unix上的Python2上运行相同的脚本,其中
print(unicode\u text)
按原样工作。修改
sitecustomize
模块对我来说太麻烦了。它可能会影响不相关的代码。为了将输出重定向到一个文件,我设置了pythoniocodeding并运行
py your_script.py>output.txt
。 sys.stdout encoding is "cp1252" Traceback (most recent call last): File "TestPrintEncoding.py", line 22, in [module] print(str1) File "C:\Python30\lib\io.py", line 1491, in write b = encoder.encode(s) File "C:\Python30\lib\encodings\cp1252.py", line 19, in encode return codecs.charmap_encode(input,self.errors,encoding_table)[0] UnicodeEncodeError: 'charmap' codec can't encode character '\u0101' in position 4: character maps to [undefined]
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys