Python:系统命令中的unicode

时间:2013-01-11 23:34:35

标签: python unicode encoding

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

  • AdolfoLópezMateos
  • StanisławaWalasiewicz
  • JörgenJönsson

所以在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个字符? According to a few articles that I've read,可能是因为它被编码为latin-1但它被读作utf-8,但我尝试来回编码他们之间并没有帮助。

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

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

谢谢!

1 个答案:

答案 0 :(得分:12)

改为使用subprocess.call

>>> s = u'Jörgen Jönsson'
>>> import subprocess
>>> subprocess.call(['echo', s])
Jörgen Jönsson
0