gpt4 book ai didi

Python 子进程回显一个 unicode 文字

转载 作者:太空狗 更新时间:2023-10-29 21:54:58 27 4
gpt4 key购买 nike

我知道以前有人问过这样的问题。但我没有找到解决方案。

我想将在我的 python 文件中定义的 unicode 文字与 subprocess 模块一起使用。但我没有得到我需要的结果。比如下面的代码

# -*- coding: utf-8 -*-
import sys
import codecs
import subprocess
cmd = ['echo', u'你好']
new_cmd = []
for c in cmd:
if isinstance(c,unicode):
c = c.encode('utf-8')
new_cmd.append(c)
subprocess.call(new_cmd)

打印出来

你好

如果我将代码更改为

# -*- coding: utf-8 -*-
import sys
import codecs
import subprocess
cmd = ['echo', u'你好']
new_cmd = []
for c in cmd:
if isinstance(c,unicode):
c = c.encode(sys.getfilesystemencoding())
new_cmd.append(c)
subprocess.call(new_cmd)

我得到以下信息

??

在这个阶段,我只能假设我反复犯了一个简单的错误。但我很难弄清楚它是什么。当通过 python 的子进程调用时,如何让 echo 打印出以下内容

你好

编辑:

Python的版本是2.7。我在 Windows 8 上运行,但我希望解决方案独立于平台。

最佳答案

你的第一次尝试是最好的。

您实际上将 2 个 unicode 字符 u'你好'(或 u'\u4f60\u597d')转换为 UTF8 所有这些都给出了 b'\xe4\xbd\xa0\xe5\xa5\xbd'.

您可以在完全支持 unicode 的 IDLE 中控制它,其中 b'\xe4\xbd\xa0\xe5\xa5\xbd'.decode('utf-8') 返回 你好。另一种控制它的方法是将脚本输出重定向到一个文件并使用 UTF-8 兼容的编辑器打开它:您将再次看到您想要的内容。

但问题是 Windows 控制台不支持完整的 unicode。这取决于:

  • 安装的代码页 - 我不知道 Windows 8,但以前的版本对 unicode 的支持很差,只能显示 256 个字符
  • 控制台中使用的字体 - 并非所有字体都具有所有字符的字形。

如果您知道包含字符字形的代码页(我不知道),您可以尝试使用 chcp 将其插入控制台,并将您的 unicode 字符串显式编码为该代码页。但是在我的法语机器上,我不知道该怎么做......除了传递一个文本文件!

正如你所说的 ConEmu,我试了一下......它在 python 3.4 上运行良好!

chcp 65001
py -3
import subprocess
cmd = ['cmd', '/c', 'echo', u'\u4f60\u597d']
subprocess.call(cmd)

给出:

你好  
0

问题仅在 cmd.exe 窗口中!

关于Python 子进程回显一个 unicode 文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30055084/

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