假设我在Python(2.7)中有一个神秘的unicode字符串,我想将其提供给命令行程序,例如imagemagick(或者实际上只是以任何方式获取它的 out )。字符串可能是:
所以在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'),我会得到以下内容:
我希望有人认识到这种特殊的编码问题,并且可以提供一些建议,因为我的想法不合时宜。
谢谢!
答案 0 :(得分:12)
改为使用subprocess.call:
>>> s = u'Jörgen Jönsson'
>>> import subprocess
>>> subprocess.call(['echo', s])
Jörgen Jönsson
0