gpt4 book ai didi

python - 如何使用 Python 3.4(Windows 8)将 utf-8 打印到控制台?

转载 作者:IT老高 更新时间:2023-10-28 20:22:54 27 4
gpt4 key购买 nike

我正在尝试将 utf-8 卡片符号 (♠,♥,♦︎︎,♣) 从 python 模块打印到 Windows 控制台。我使用的控制台是 git bash,我使用 console2 作为前端。我已经尝试/阅读了以下多种方法,但到目前为止没有任何效果。

  • 确保控制台可以处理 utf-8 字符。这两个测试让我相信控制台不是问题。

    enter image description here

  • 从 python 模块尝试同样的事情。
    当我执行 .py 时,这就是结果。

     print(u'♠')
    UnicodeEncodeError: 'charmap' codec can't encode character '\u2660' in position 0: character maps to <undefined>
  • 尝试编码♠。这给了我以 utf-8 编码的 unicode 集,但仍然没有黑桃符号。

     text = '♠'
    print(text.encode('utf-8'))
    b'\xe2\x99\xa0'

我觉得我错过了一个步骤或不了解整个编码/解码过程。我已阅读 this , this , 和 this .最后一页建议将 sys.stdout 包装到代码中,但 this文章说使用标准输出是不必要的,并使用编解码器模块指向另一个页面。

最佳答案

What I'm trying to do is print utf-8 card symbols (♠,♥,♦,♣) from a python module to a windows console

UTF-8 是 Unicode 字符的字节编码。 ♠♥♦♣ 是 Unicode 字符,可以以多种编码方式复制,而 UTF-8 是其中一种编码方式——作为 UTF,UTF-8 可以复制任何 Unicode 字符。但这些字符并没有什么特别的“UTF-8”。

可以重现字符 ♠♥♦♣ 的其他编码是 Windows code page 850437 ,您的控制台很可能在西欧安装的 Windows 下使用。您可以在这些编码中打印 ♠,但您没有使用 UTF-8 来执行此操作,并且您将无法使用 UTF-8 中可用但超出这些代码页范围的其他 Unicode 字符。

print(u'♠')
UnicodeEncodeError: 'charmap' codec can't encode character '\u2660'

在 Python 3 中,这与 print('♠') 相同。您在上面所做的测试,因此您调用包含此 print 的脚本的方式有所不同,与您的 py -3.4 相比. sys.stdout.encoding 是什么意思从剧本给你?

获取 print正常工作你必须确保 Python 选择正确的编码。如果从终端设置中没有充分做到这一点,您确实必须设置 PYTHONIOENCODINGcp437 .

>>> text = '♠'
>>> print(text.encode('utf-8'))
b'\xe2\x99\xa0'

print只能打印 Unicode 字符串。对于其他类型,包括 bytesencode() 产生的字符串方法,它获取对象的文字表示( repr )。 b'\xe2\x99\xa0'是如何编写包含 UTF-8 编码的 ♠ 的 Python 3 字节文字。

如果你想要绕过print的隐式编码为 PYTHONIOENCODING 并替换为您自己的,您可以明确地这样做:

>>> import sys
>>> sys.stdout.buffer.write('♠'.encode('cp437'))

这当然会为未运行代码页 437 的任何控制台生成错误输出(例如,非西欧安装)。通常,对于使用 C 标准输入输出的应用程序,如 Python 那样,将非 ASCII 字符发送到 Windows 控制台实在是太不可靠了。

关于python - 如何使用 Python 3.4(Windows 8)将 utf-8 打印到控制台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25127673/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com