2015-09-28 9 views
0

Я застрял в кодировке python и unicode/character (Python 2.7), когда дело касается путей к папкам.Unicode в пути к папке

Я построить путь из отдельных частей, созданных по моему сценарию:

>>> 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

Это известная ошибка в 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) 
+0

Спасибо за этот совет! Но ... обходной путь не решил проблему для меня, я все равно получаю ту же ошибку. Я действительно начинаю «подпроцесс» с помощью кнопки wxpython klick - это важно? – xph

Смежные вопросы