Буквально на днях начал осваивать web-программирование. Начать решил с Python 2.7 + Django 1.1. После прочтения введений восхищению не было предела (оно есть до сих пор).
Трудность появилась при попытке реализовать пример, приведенный в введении в Django. Трудность заключалась в том, что при попытке загрузить войти в административную часть новосозданного сайта, все отображалось не так как в примерах, а без стилей. При этом в журналах отладочного сервера выдавалось следующее сообщение:
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\django\core\servers\basehttp.py", line 280, in run
self.result = application(self.environ, self.start_response)
File "C:\Python27\lib\site-packages\django\core\servers\basehttp.py", line 709, in __call__
mime_type = mimetypes.guess_type(file_path)[0]
File "C:\Python27\lib\mimetypes.py", line 295, in guess_type
init()
File "C:\Python27\lib\mimetypes.py", line 356, in init
db.read_windows_registry()
File "C:\Python27\lib\mimetypes.py", line 261, in read_windows_registry
for ctype in enum_types(mimedb):
File "C:\Python27\lib\mimetypes.py", line 251, in enum_types
ctype = ctype.encode(default_encoding) # omit in 3.x!
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)
Наличие исходников стандартной библиотеки Python-а позволило найти проблему довольно быстро. Я использую Windows XP. В моем случае проблема заключалась в том, что в реестре в разделе [HKEY_CLASSES_ROOT\CLSID\{4063BE15-3B08-470D-A0D5-B37161CFFD69}\EnableFullPage\MIME] содержались подразделы содержащие в названии кириллицу. При удалении этих разделов они автоматически пересоздавались. Поэтому помогло переименование, просто заменил кириллицу латиницей.
Понятно, что это частный случай и настройки системы. Но возможно, эта заметка позволит кому-нибудь сэкономить время.
--
Mihail 2 ноября 2012 г., 22:06
Для тех у кого в registry Windows 7 нет русских ключей, но проблема осталась - переименуйте сетевое имя компьютера с русского на английский языки.
--
Casufi5 декабря 2012 г., 19:06
Решение исправлением библиотеки: http://softwaremaniacs.org/forum/django/31707/
среда, 7 июля 2010 г.
Подписаться на:
Комментарии к сообщению (Atom)
Спасибо! Столкнулся с такой же фигней, помогло :)
ОтветитьУдалитьСпасибо!
ОтветитьУдалитьНа vista нужно так же удалить русские ключи из:
HKEY_CLASSES_ROOT\MIME\Database\Content Type
И мне помогло, спасибо. Несмотря на все обновления, ошибка актуальна даже в 2014-м году.
Удалить//Windows 7
Помогло. Спасибо. Windows 7 стоит, а не виста. Так что и для семерки актуально
УдалитьНа XP Sp3 также работает вариант nord_ak
ОтветитьУдалитьИ мне помогло. Спасибо Victor & palanutsa!
ОтветитьУдалитьОгромное спасибо! 2 дня убил. Теперь всё ok. Действительно, нужно в двух местах убирать кириллицу.
ОтветитьУдалитьИ от меня спасибо! :) Хватило переименования в “HKEY_CLASSES_ROOT\MIME\Database\Content Type” трёх подветок, названия которых начинались с «аудио» и «видео».
ОтветитьУдалитьСпасибо большое, на XP в “HKEY_CLASSES_ROOT\MIME\Database\Content Type” поменял кирилицу на латиницу - заработало.
ОтветитьУдалитьОгромное спасибо ваша заметка просто прелесть. Сделал на вас закладку и рекламирую вас в своем блоге.
ОтветитьУдалитьСпасибо.
ОтветитьУдалитьСпасибо большое!
ОтветитьУдалитьWindows XP, также пришлось переименовывать строчки, которые указаны автором, + удалить похожие строчки (в этом месте они не переименовывались) в HKEY_CLASSES_ROOT\MIME\Database\Content Type
ОтветитьУдалитьУважаемые, скажите, какие строчки (Имя, значение или другое, что) надо удалить? Перерыл всю Весь реестр.
ОтветитьУдалитьКуча ключей "(По умалчанию)" со значением "(значение не присвоено)..
Заранее спасибо
Значения в реестре зависят от того, какое программное обеспечение у Вас установлено. Сказать однозначно из-за какого ключа/значения возникает ошибка можно только имея доступ к вашему компьютеру. В момент возникновения ошибки Вы видите trace и знаете место где возникла ошибка. Можете попробовать добавить в код библиотек вывод ключа реестра (ищите где вызывается read_windows_registry) и тогда будете точно знать ключ.
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьВиктор, Спасибо большое.
ОтветитьУдалитьВсе значения на которых нажимаем F2 находяться здесь HKEY_CLASSES_ROOT\MIME\Database\Content Type
Конкретный скрин о том что ищем: http://s45.radikal.ru/i109/1101/57/e135b2f35df7.gif
Проблема с именами, а не с значениями. Слева в дереве, там же где audio/... внизу, на этом же уровне, есть ключи с кириллицей в названиях. Их нужно удалить или переименовать.
ОтветитьУдалитьСпасибо большое!
ОтветитьУдалитьСпасибо Victor и Николай!
ОтветитьУдалитьМне пришлось менять/удалять в обоих местах.
Знают ли кодировщики сервера приложений об этой дурацкой ошибке?
Думаю не знают. Чтобы они об этом знали они должны пользоваться во первых Windows, во вторых русской (не английской) редакцией. :) Это маловероятно.
ОтветитьУдалитьПредлагаю написать им feedback.
ОтветитьУдалитьНа Windows 7 проблема так же решается в ветке HKEY_CLASSES_ROOT\MIME\Database\Content Type
ОтветитьУдалитьСпасибо автору. На Win 7 помогло удаление в ветке HKEY_CLASSES_ROOT\MIME\Database\Content Type раздеделов с названием "аудио" и "видео"
УдалитьБольшое спасибо! но я испугался лезть в реестр и переустановил Python 2.6 вместо 2.7
ОтветитьУдалитьВладимир
Этот комментарий был удален автором.
ОтветитьУдалитьСпасибо! Помогло!
ОтветитьУдалитьСпасибо!
ОтветитьУдалитьПрисоединяюсь тоже, Спасибо! Помогло.
ОтветитьУдалитьможет лучше просто поменять строкой ниже и вместо
ОтветитьУдалитьexcept UnicodeEncodeError:
поставить
except UnicodeDecodeError:
или я чтото не то говорю?
я имею ввиду корректировку файла
ОтветитьУдалить\Lib\mimetypes.py строка 250
Возможно, Вы правы. Я ограничился тем, что нашел и устранил причину. Исходники не правил.
ОтветитьУдалитьОгромное спасибо! Под Win7 помогла правка реестра.
ОтветитьУдалитьАвтор, ты крут :)
ОтветитьУдалитьОсталось узнать, какая мерзость пишет кириллические ключи в реестр.
Я очень сильно подозреваю что это Quicktime, ибо ничего мультимедийного кроме него я не ставил в последнее время.
Это именно Quick Time
Удалитьспасибо дяденька, очень выручил.
ОтветитьУдалитьСпасибо за заметку.
ОтветитьУдалитьСлава будде! Нашел эту статью через стек. Там западные мужики эту статью гуглтранслейтяд и чинят. Автор ты известен
ОтветитьУдалитьпроблема есть а ключей в реестре на русском нет :(
ОтветитьУдалитьwin7
Дико извиняюсь, все нашел исправил GAE завилась!!!
ОтветитьУдалитьСПАСИБО
Выручили! W7 так же
ОтветитьУдалитьСпасибо. Отличная заметка
ОтветитьУдалитьТочно, на Win7 сработало.
ОтветитьУдалитьДолго мучился, спасибо!
Спасибо автору и комментатору, вот не поленюсь комент написать. Помогло исправление в обеих ветках реестра на вин7
ОтветитьУдалитьОГРОМНОЕ СПАСИБО АВТОРУ!
ОтветитьУдалитьДва дня мучений окончены!!!
Как вы узнали путь [HKEY_CLASSES_ROOT\CLSID\{4063BE15-3B08-470D-A0D5-B37161CFFD69}\EnableFullPage\MIME]?
ОтветитьУдалитьУ меня нет {4063BE15-3B08-470D-A0D5-B37161CFFD69}...
СПАСИБО!!! очень странно что это еще не описано в самом руководстве!
ОтветитьУдалитьСпасибо, большое.
ОтветитьУдалитьНа 7 помогло.
Благодарю, помогло
ОтветитьУдалитьДля тех у кого в registry Windows 7 нет русских ключей, но проблема осталась - переименуйте сетевое имя компьютера с русского на английский языки.
ОтветитьУдалитьМне помог этот патч http://bugs.python.org/review/9291/patch/191/354 - замена UnicodeEncodeError на UnicodeError в mimetypes.py:250
ОтветитьУдалитьэтот способ работает. Удаление ключей не помогло. Win7
УдалитьРешение проблемы а не прикручивание костылей
ОтветитьУдалитьhttp://softwaremaniacs.org/forum/django/31707/
можно кусок mimetypes.py выдрать, чтобы пробовать печатать весь раздел, кода споткнётся берем последнюю напечатанную строку и выбиваем в поиск по реестру.
ОтветитьУдалитьimport _winreg
def enum_types(mimedb):
i = 0
while True:
try:
ctype = _winreg.EnumKey(mimedb, i)
except EnvironmentError:
break
try:
ctype = ctype.encode() # omit in 3.x!
except UnicodeEncodeError:
pass
else:
yield ctype
i += 1
with _winreg.OpenKey(_winreg.HKEY_CLASSES_ROOT, '') as hkcr:
for subkeyname in enum_types(hkcr):
print subkeyname