打开一个unicodepath

我有一个unicode文件名,我想打开。 以下代码:

cmd = u'cmd /c "C:\\Pok\xe9mon.mp3"' cmd = cmd.encode('utf-8') subprocess.Popen(cmd) 

回报

 >>> 'C:\Pokיmon.mp3' is not recognized as an internal or external command, operable program or batch file. 

即使该文件确实存在。 为什么发生这种情况?

Solutions Collecting From Web of "打开一个unicodepath"

看起来你正在使用Windows和Python 2.X. 使用os.startfile :

 >>> import os >>> os.startfile(u'Pokémon.mp3') 

不直观的是,获得命令外壳来做同样的事情是:

 >>> import subprocess >>> import locale >>> subprocess.Popen(u'Pokémon.mp3'.encode(locale.getpreferredencoding()),shell=True) 

在我的系统上,命令外壳程序(cmd.exe)编码为cp437 ,但Windows程序为cp1252Popen希望shell命令编码为cp1252 。 这看起来像一个错误,它似乎也修复了Python 3.X:

 >>> import subprocess >>> subprocess.Popen('Pokémon.mp3',shell=True) 

你的问题可以通过Django模块的smart_str函数来解决。

使用此代码:

 from django.utils.encoding import smart_str, smart_unicode cmd = u'cmd /c "C:\\Pok\xe9mon.mp3"' smart_cmd = smart_str(cmd) subprocess.Popen(smart_cmd) 

你可以在这里找到关于如何在Windows上安装Django的信息。 您可以先安装pip ,然后通过以管理员权限启动命令shell来安装Django,然后运行以下命令:

 pip install Django 

这将在您的Python安装的site-packages目录中安装Django。

 >>> subprocess.call(['start', u'avión.mp3'.encode('latin1')], shell=True) 0 

如果使用shell参数,则不需要调用cmd启动关联程序的正确方法是使用cmd的start内置AFAIK。

我的2c,HIH。

我认为Windows使用16位字符,不知道是否是UCS2或UTF16或类似的东西。 所以我猜想它可能有UTF8的问题。