Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Проблема с кодировкой


Автор: Sergey912 19.1.2009, 08:58
Безуспешно пытаюсь решить проблему с кодировкой при получении списка файлов под Win.
Как только видит папку на русском выдает мне:
Код

UnicodeEncodeError: 'ascii' codec can't encode characters in position 3-10: ordinal not in range(128)

Выдает при попытке вывести в консоль или при попытке получить список файлов:
Код

  File "C:\Documents and Settings\Admin\Рабочий стол\Mp3Honey\1.py", line 9, in dirtree
    list = os.listdir(path)
WindowsError: [Error 123] Синтаксическая ошибка в имени файла,: 'D:/????????/*.*'

Искал на форуме, нашел несколько похожих тем, но так и не вижу очевидного нормального решения  smile Что делать?
Нашел http://chardet.feedparser.org/, но его setup не работает, перерыл все никаких "You python dir here" не нашел...
Код

import chardet

говорит что нет такого модуля.
Само приложение с GUI сначала были глюки с текстом на нем, но решилось все через u"Текст". Но когда я пробую перекодировать в юникод папку:
Код

        print unicode(sdir,"utf-8")
        D:/????????

Автор: pythonwin 19.1.2009, 09:03
если скрипт консольный, то использовать нужно кодировку cp866, а если гуишный, то cp1251

Автор: Sergey912 19.1.2009, 09:05
Цитата

если скрипт консольный, то использовать нужно кодировку cp866, а если гуишный, то cp1251 

А как это сделать с полученным путем к папке?

Автор: pythonwin 19.1.2009, 09:10
Цитата(Sergey912 @  19.1.2009,  12:05 Найти цитируемый пост)
А как это сделать с полученным путем к папке? 

можно пример кода?

Автор: Sergey912 19.1.2009, 09:17
pythonwin, 
Сколько угодно smile
Код

sdir = QtGui.QFileDialog.getExistingDirectory(self, "Open Directory","/home", QtGui.QFileDialog.ShowDirsOnly|QtGui.QFileDialog.DontResolveSymlinks)
os.path.isdir(sdir)


Для любой папки с русскими буквами:
Код

list = os.listdir(path)
WindowsError: [Error 123] Синтаксическая ошибка в имени файла,: 'D:/????????/*.*'


После листинга диска через получил:
Код

print os.listdir("d:/")
['\xc0\xf0\xf5\xe8\xe2', '\xcc\xe8\xed\xe8\xc8\xe3\xf0\xfb', '\xcc\xce\xa8']


а потом:
Код

print unicode("'\xc0\xf0\xf5\xe8\xe2'", "windows-1251")
'Архив'

Где зарыто ясно, что делать не ясно :(

Автор: pythonwin 19.1.2009, 09:24
попробуй 
Код

path = unicode(path, 'cp1251')
list = os.listdir(path)

или так
Код

path = unicode(path, 'cp866')
list = os.listdir(path)


Автор: Sergey912 19.1.2009, 09:25
pythonwin, 
Выше только отредактирова, проблема именно в QtGui.QFileDialog

Автор: aspolyakov 21.1.2009, 09:20
Sergey912, Как ты это обошел? у меня таже проблема, но пока в долгий ящик отложена

Автор: Sergey912 22.1.2009, 00:52
aspolyakov, 
Тут нашел решение:
http://python.su/forum/viewtopic.php?id=3581

p.s. Вообще не разбирался пока с PyQt+кодировки, удачно под руку попалось.

Автор: pythonwin 22.1.2009, 09:43
Цитата(Sergey912 @  22.1.2009,  03:52 Найти цитируемый пост)
p.s. Вообще не разбирался пока с PyQt+кодировки, удачно под руку попалось. 

смотри ответ:
Цитата

Вот это и говорит о том, что проблема отнюдь не в GUI ;).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)