Ошибка при обработке строки юникода

У меня есть приложение wxPython, которое я превратил в приложение с помощью py2app. Некоторое время он работал нормально, и, не меняя ничего, о чем я знаю, я внезапно получаю UnicodeDecodeError: 'ascii' codec can't decode byte 0xcc in position 2: ordinal not in range(128). Я никак не менял файл. Я даже не переделывал приложение, оно такое же, как и раньше, ничем не отличается. Я слышал, что это может произойти, если «терминал не настроен на UTF-8», но это приложение не использует терминал, и я не менял никаких настроек в своем терминале, так как он работал нормально.

РЕДАКТИРОВАТЬ: я обнаружил, что проблема в том, что у меня есть строка, которая делает os.listdir(). Каталог теперь содержит имя файла с расширением ü. Почему возникает эта ошибка? Разве он не должен просто изменить его из строки в тип Unicode?


person tkbx    schedule 29.10.2012    source источник
comment
Каков ваш вклад? Файл? Можете ли вы вставить строку кода, которая вызывает исключение?   -  person Alastair McCormack    schedule 29.10.2012
comment
Когда ваша программа завершается, она должна содержать трассировку стека, включая номер строки. Можете ли вы предоставить точную строку, которая терпит неудачу?   -  person Alastair McCormack    schedule 29.10.2012
comment
@Fuzzyfelt Он работает как .app, просто говорит что-то вроде AppName has encountered an error and needs to close: SomeError: variable x referenced before assignment. Но я уже знаю, что вызывает ошибку, мне просто нужно было знать, как ее исправить (ответил jro)   -  person tkbx    schedule 29.10.2012


Ответы (1)


Вам нужно предоставить строку Unicode для os.listdir. При этом имена файлов будут декодированы с использованием кодировки файловой системы.

import os
>>> os.listdir(u'c:\\')
[u'$Recycle.Bin', u'Config.Msi', u'Documents and Settings', u'hiberfil.sys', (...)]
person jro    schedule 29.10.2012