5

假设我在 Python (2.7) 中有一个神秘的 unicode 字符串,我想将它提供给诸如 imagemagick 之类的命令行程序(或者实际上只是以任何方式Python 中获取它)。字符串可能是:

  • 阿道夫·洛佩斯·马特奥斯
  • 斯坦尼斯瓦瓦瓦拉谢维奇
  • 约根·琼森

所以在 Python 中,我可能会做一个像这样的小命令:

cmd = u'convert -pointsize 24 label:"%s" "%s.png"' % (name, name)

如果我只是打印cmd并获取convert -pointsize 24 label:"Jörgen Jönsson" "Jörgen Jönsson.png"然后自己运行它,一切都很好。

但如果我这样做os.system( cmd ),我会得到这个:

我知道这不是 imagemagick 问题,因为文件名也很混乱。我知道当 Python 将命令传递给 os.system 时,它会将命令转换为 ascii,但为什么它的编码如此错误?为什么将每个非 ASCII 字符解释为 2 个字符? 根据 我读过的几篇 文章 ,这可能是因为它被编码为 latin-1 但它被读取为 utf-8,但我尝试在它们之间来回编码它并没有帮助。

当我尝试将其手动编码为 ascii 而没有替换参数时,我得到了 Unicode 异常,但是如果我这样做 name.encode('ascii','xmlcharrefreplace'),我会得到以下信息:

我希望有人认识到这种特殊的编码问题并可以提供一些建议,因为我几乎没有想法。

谢谢!

4

1 回答 1

15

改用subprocess.call

>>> s = u'Jörgen Jönsson'
>>> import subprocess
>>> subprocess.call(['echo', s])
Jörgen Jönsson
0
于 2013-01-12T00:39:39.777 回答