假设我在 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"
然后自己运行它,一切都很好。
- 阿道夫·洛佩斯·马特奥斯.png
- 示例 1 http://4u.jeffcrouse.info/stackoverflow/A-01.png
- Stanisława Walasiewicz.png
- 示例 2 http://4u.jeffcrouse.info/stackoverflow/A-02.png
但如果我这样做os.system( cmd )
,我会得到这个:
- Adolfo López Mateos.png
- 示例 4 http://4u.jeffcrouse.info/stackoverflow/B-01.png
- Stanisława Walasiewicz.png
- 示例 5 http://4u.jeffcrouse.info/stackoverflow/B-02.png
我知道这不是 imagemagick 问题,因为文件名也很混乱。我知道当 Python 将命令传递给 os.system 时,它会将命令转换为 ascii,但为什么它的编码如此错误?为什么将每个非 ASCII 字符解释为 2 个字符? 根据 我读过的几篇 文章 ,这可能是因为它被编码为 latin-1 但它被读取为 utf-8,但我尝试在它们之间来回编码它并没有帮助。
当我尝试将其手动编码为 ascii 而没有替换参数时,我得到了 Unicode 异常,但是如果我这样做 name.encode('ascii','xmlcharrefreplace'),我会得到以下信息:
- 示例 4 http://4u.jeffcrouse.info/stackoverflow/C-01.png
- 示例 5 http://4u.jeffcrouse.info/stackoverflow/C-02.png
我希望有人认识到这种特殊的编码问题并可以提供一些建议,因为我几乎没有想法。
谢谢!