【发布时间】:2012-04-23 21:48:36
【问题描述】:
我在内存中确实有以下路径:
video_path = u'C:\\Documents and Settings\\user\\My Documents\\Downloads\\\xf5iv - Neon Phoenix [Free DL].mp3'
我正在尝试将它用作cmd中的参数,所以我必须对其进行编码。
video_path = video_path.encode(sys.getfilesystemencoding())
cmd = 'ffmpeg -y -i "%s" -vn -ac 2 -f mp3 audio.mp3' % video_path
subprocess.Popen(cmd)
但是,字符串没有以正确的方式编码 - 它将\xf5 转换为? 而不是õ。因此找不到该文件。
怎么会这样?我使用的是默认文件系统编码(mbcs)。
【问题讨论】:
-
Windows 使用 Unicode 路径。为什么要对 Unicode 字符串进行编码?
-
@André:它使用“Unicode”,而不是 Unicode。
-
我现在在猜测,但是如果您将
video_path保留为 unicode 对象(不对其进行编码),将cmd = u'..' % videopath也构造为 Unicode,然后在最后进行编码,会发生什么情况:@ 987654329@?在 Linux 和 Python 2.7 上没有区别,但在您的平台上可能值得一试。 -
是一样的。问题是“mbcs”没有按应有的方式转换
\xf5字符,即使它是Windows XP 的默认系统编码(也可能是7)。这似乎是一个实现错误,但我不确定。