Питон - просто капец |
Здравствуйте, гость ( Вход | Регистрация )
Питон - просто капец |
Litkevich Yuriy |
26.3.2014, 22:48
Сообщение
#1
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
у меня уже сложилось стойкое впечатление, что Питон писал голандец, для которого доступ у наркоте такой-же как у нас к сигаретам.
Делаю сайт на Джанге (1.5 / Питон 2.7) сделал логер mylogger.py
Решил использовать: Раскрывающийся текст
Порвал бы нарка |
|
|
Iron Bug |
27.3.2014, 9:21
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
надо просто документацию читать.
для записи юникода в файл нужно использовать перекодирование строки в юникод: encode('utf8'). когда скрипт обламывается, загрузка страницы тоже обламывается. так что последствия могут быт какие угодно. |
|
|
Litkevich Yuriy |
27.3.2014, 21:41
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
нужно использовать перекодирование строки в юникод: encode('utf8'). пробовано, универсально не работает, на виндавозе работает, а после выкладывания на хостинг - фик.Вообще питон и кодировки - засада. Вменяемо сделать нарк не мог. Поэтому пол интернета - один вопросы с кодировками. В тойже Qt есть класс QString, который всё разруливает. Сегодня потратил день на следующий код: Раскрывающийся текст
Щас вот думаю, как сделать, чтобы у меня и на винде и на лине этот код работал. |
|
|
Iron Bug |
28.3.2014, 9:42
Сообщение
#4
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
дело не в питоне. тут у тебя уже где-то не стоят кодировки или ещё что-то, нужное ему для перекодирования. читай логи, проверь, что у тебя вообще стоит UTF-8 в системе.
|
|
|
Litkevich Yuriy |
28.3.2014, 22:10
Сообщение
#5
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
На хостинге может стоять любая системная кодировка и koi8-r в том числе. И совсем не дело всё это в коде разруливать, тем более что есть ещё и сторонние пакеты.
|
|
|
Iron Bug |
29.3.2014, 12:09
Сообщение
#6
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
во-первых, хостинг всегда предоставляет информацию о том, что у них установлено. во-вторых, к системной кодировке этот вопрос вообще отношения не имеет. но если это публичный хостинг, то вряд ли там есть проблемы с неустановленными кодировками.
видишь ли, ты ковыряешь вещи, которые не знаешь. работаешь с сервером, настроек которого ты не спрашивал. пытаешься писать на языке, правил которого ты не читал. и выдвигаешь претензии, что все вокруг виноваты. как-то так получается. люди пишут на Питоне дофига всего, никто не жалуется. может, надо начать с Hello,World и разобраться с языком, прежде чем переходить к правке чужого кода? тем более, не стоит делать таких вещей с рабочими, а не тестовыми сайтами. |
|
|
Litkevich Yuriy |
5.4.2014, 17:39
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
прежде чем переходить к правке чужого кода? я весь сайт с нуля сделал А жопа с кодировкой так и осталась. Пока методом научного тыка подобрал какую-то комбинацию string.enode("FOO").decode("BAR") и преобразовал имена всех ранее загруженных файлов MD5, информацию об оригинальном имени храню в БД. Теперь при загрузке на сервер все файлы так переименовываю. Вообще критинизм заключается в выбросе исключений при преобразовании кодировок. Представь себе текстовый редактор (например, редактор кода в IDE) который падает, если кодировка файла для него оказалась не понятной. люди пишут на Питоне дофига всего, никто не жалуется им не вдомёк, что кроме английского существуют другие языки, в частности один из сторонних модулей джанги усиленно использовал не Юникод-константы, т.е.str = 'foo' вместо str =u'foo' а потом к ни прибавлялись имена файлов с русскими буквами и происходило исключение. |
|
|
Iron Bug |
6.4.2014, 12:42
Сообщение
#8
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
я бы не советовала использовать не-юникод на сайтах. потому что юникод есть везде, а вот всякие кривые кодировки вроде cp1251 - это под большим вопросом.
тут дело даже не в том, "русские" это буквы или нет. а в том, что у тебя есть конкретный редактор и в самом коде буквы могут быть кривые, типа cp1251, а юниксовые сервера обычно про них ничего не знают. в общем, лучше использовать юникод. там хоть английский, хоть русский, хоть китайский. и никаких проблем. |
|
|
Litkevich Yuriy |
6.4.2014, 15:41
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
В этом-то и беда, что в питоне, пусть по историческим причинам, есть два типа строк.
А дорабатывать этот чужой модуль я не рискнул, т.к. он сложен для меня. И ещё некоторые функции питона пытаются определить тип строки ковыряя питоно-потраха самой строки, при этом чаще всего и происходят исключения, т.к. они оперируют жёсткими таблицами перекодировки. По этому я и сравнил с Qt, в которой есть QString и только через него вся работа идёт (есть конечно и сырая строка - QByteArray, но с ней меньше сталкиваешься). Одно могу сказать с уверенностью: выкидывание исключений при преобразовании кодировок - зло. П.С. в тестовом режиме запустил: http://стрекоза-тюмень.рф/catalog |
|
|
Текстовая версия | Сейчас: 22.11.2024, 10:04 |