2015-09-28 70 views
0

當涉及到文件夾路徑時,我被python和unicode /字符編碼(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-call工作?

回答

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啓動'subprocess' - 這有什麼關係嗎? – xph