文件夹路径中的Unicode

时间:2015-09-28 22:29:44

标签: python character-encoding

在文件夹路径方面,我坚持使用python和unicode /字符编码(Python 2.7)。

我构建了一个由我的脚本创建的单个部分的路径:

>>> parts = {u'first':var_a, u'second':var_b, u'third':var_c}
>>> parts
{u'second': u'\xe4\xfc\xf6\xdf', u'third': u'1120_21_22', u'first': u'0222'}

......接着是:

>>> path = os.path.join('test', parts[u'first'], parts[u'second'], parts[u'third'])
>>> path
u'test\\0222\\\xe4\xfc\xf6\xdf\\1120_21_22'

打印时没有问题:

>>> print path
test\0222\äüöß\1120_21_22

它也有效:

>>> os.path.isdir(path)
True

但我无法打开它:

>>> subprocess.Popen(u'explorer "' + path + u'"')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\subprocess.py", line 679, in __init__
    errread, errwrite)
  File "C:\Python27\lib\subprocess.py", line 896, in _execute_child
    startupinfo)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 20-23: ordinal not in range(128)

只有路径中的特殊字符才会发生这种情况。需要进行哪种编码/解码才能使subprocess - 调用工作?

1 个答案:

答案 0 :(得分:1)

这是Python中的已知错误。您无法为subprocess.Popen:https://bugs.python.org/issue6135

指定编码

该问题也有解决方法:

my_env = os.environ
my_env['PYTHONIOENCODING'] = 'utf-8'
subprocess.Popen(u'explorer "' + path + u'"', env=my_env)