Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Python: Общие вопросы > Проблемы с кодировками |
Автор: HellanD 11.6.2007, 11:23 | ||
Есть у меня кусок кода, который читает данные(они на русском языке) из файла:
А он мне выдает вот такое... Можете обьяснить причину? В начале кода у меня стоит # -*- coding: cp1251 -*- self.name = unicode(file.readline()[:-1]) UnicodeDecodeError: 'ascii' codec can't decode byte 0xcf in position 0: ordinal not in range(128) |
Автор: srd 11.6.2007, 11:51 | ||
Попробуй:
Если при декодировании "узкой" строки в юникод не задана кодировка, т.е. используется кодек по-умолчанию ascii, который, разумеется, не понимает русских символов. Этот кодек выбирается один раз при стартапе питона и потом менять его нельзя. Потому пользуйся методами decode/encode. Можешь ещё помедитировать на код метода setencoding() в файле Lib/site.py в том каталоге, где у тебя установлен питон ![]() Это относится только к кодировке файла с исходным кодом. Об остальном ты должен позаботиться сам ![]() |
Автор: HellanD 11.6.2007, 12:35 | ||
Попробовал заюзать
Есть проблемка... Он в конец строки добавляет казяблик(я так понимаю символ окончания строки), а это не хорошо...Я и так от них избавлялся с помощью страшного file.readline()[:-1]....(Кстате а это как то можно улутшить??) Добавлено через 4 минуты и 15 секунд Стоп на счет казябликов сори, сам напутал....По ошибке убрал [:-1] |
Автор: pythonwin 11.6.2007, 12:55 |
HellanD, можешь ещё посмотреть http://www.rupy.ru/member/5/#paper-6 |
Автор: pythonwin 11.6.2007, 14:50 | ||
насчет интересных ссылок: 1) они постепенно накапливаются 2) можно многое почерпнуть читая http://python.com.ua/ru/links/blogi/ и статьи на http://python.com.ua/ru/articles/Python/ |
Автор: HellanD 12.6.2007, 08:46 | ||
Вот помню что точно когдато над ним медетировал....Теперь тесты на моей тачке запускаются а на другой нет....Можете еще подробно написать как над ним можно помедетировать? ![]() |
Автор: Ulysses4j 12.6.2007, 11:13 | ||||||
Цитата по предложенному pythonwin материалу "Использование Unicode в Python" (стр. 7). |
Автор: HellanD 12.6.2007, 11:47 |
Да я то понял...Предложение такое откатить назад либу site.py...И решить вопрос иначе (А если кодировка не 'utf-8'?? по моему "cp1251") |
Автор: pythonwin 12.6.2007, 19:47 |
вот статья о питоне+unicode == http://boodebr.org/main/python/all-about-python-and-unicode Добавлено через 4 минуты и 10 секунд http://python.com.ua/forum/viewtopic.php?pid=5004#p5004 Добавлено через 6 минут и 56 секунд http://chardet.feedparser.org/ Добавлено через 9 минут и 29 секунд PS администрации - закрепите, пожалуйста, тему ![]() |
Автор: HellanD 29.6.2007, 09:44 |
Еще вопрос связанный с кодировками... Вообщем захотел я получит доступ к кнопке "пуск" на рабочем столе (Винда русская ХР), узнал с помощью проги winspectr ее дескриптор, а по нему с помощью функции getWindowText узнал название окна (оно на русском и питон это выводит козябликами).... Хочу теперь найти дискриптор с помощю функции findwindow а она ничего не может найти (Ну оно и понятно я название окна передаю не понятно какое....) Подскажите плиз. Буду благодарен |
Автор: pythonwin 29.6.2007, 16:14 |
HellanD, это тебе в GUI или вариант "поиграйся" decode и encode |
Автор: HellanD 29.6.2007, 17:03 |
Ну не знаю причем тут ГУИ вообще...Англиские контролы ловяться на раз два три! А вот с decode и encode игрался - но не долго всегда получал эрор! Типа что не аски декодируешь! |
Автор: pythonwin 29.6.2007, 17:09 |
HellanD, создай отдельную тему и выложи туда код ![]() |
Автор: stoune 9.5.2008, 15:39 | ||||
Курить здесь http://www.faqs.org/docs/diveintopython/kgp_unicode.html Вкратце, создать sitecustomize.py файл в site-packages и вернуть кодировку по умолчанию, например utf8 |
Автор: pythonwin 12.5.2008, 11:02 | ||
это не правильно... как правильно читать по ссылкам: http://www.rupy.ru/member/5/#paper-6 http://www.rupy.ru/static/files/07/02/12/rupyru2007-yurevich-unicode.pdf Добавлено через 54 секунды для определения кодировки текста в файле посмотри http://chardet.feedparser.org/ |
Автор: iale 31.3.2009, 14:24 | ||||||||
Видимо давно не было проблем с кодировками. Недавно начал изучать python и есть непонимание работы с кодировками, все выше перечисленные доки я прочитал. Имеем такой код: Версия - Python 2.5.2
Результат:
Но если выполнять в интерактивном режиме, то:
Результат:
Вопрос почему разная длина, если тип один и тот же? |
Автор: _Viper_ 1.4.2009, 11:01 |
В интерактивном режиме другая кодировка, не utf-8, поэтому и длинна другая. |
Автор: Vinata 26.11.2009, 23:38 |
Здравствуйте, помогите пожалуйста, у меня преподоет молодой аспирант, который не рассказывает и не объясняет.. Нужно написать прогу на питоне из csv в базу данных, с распознованием знаков препинание и разделителя столбцов в csv.. помогите пожалуйсиа ![]() ![]() ![]() ![]() ![]() |
Автор: Ch0bits 31.12.2009, 09:10 | ||||
У меня такая проблема. Использую консоль виндовс cmd.exe, если выводить в нее текст в юникоде через print то все в порядке.
А вот при возбуждении исключений выходит такой косяк.
Как это понимать? Исключения не поддерживают юникод? O_o |
Автор: Virtuos86 14.1.2010, 05:38 | ||
Насколько я понимаю, ответ на этот вопрос раскрыли http://softwaremaniacs.org/forum/python/18278/. |
Автор: Karadul 10.2.2010, 17:36 | ||
А нельзя вместо этого написать вначале программы setdefaulencoding четотам и писать как раньше? |
Автор: pythonwin 10.2.2010, 17:54 | ||
это не правильно и это можно прочитать http://www.rupy.ru/member/5/#paper-6 http://www.rupy.ru/static/files/07/02/12/rupyru2007-yurevich-unicode.pdf http://www.rupy.ru/static/files/07/02/12/rupyru2007-yurevich-unicode-thesis.pdf |
Автор: Karadul 16.2.2010, 19:03 |
А где именно это там написано? Там написано только то, что не надо менять ничего в site.py, иначе прога будет работать только на компе разработчика. Может мне кажется, но можно как-то поставить default encoding в самой программе? |
Автор: pythonwin 16.2.2010, 19:10 |
Karadul, посмотри, пожалуйста, ссылки в моём посте чуть выше - там есть ответы. |
Автор: Virtuos86 11.4.2010, 20:28 | ||
Может нужно писать: #! -*- coding: utf-8 -*- Потому без бэнга у Вас просто комментарий написан по сути. |
Автор: mrDoctorWho 29.10.2011, 11:54 | ||||||||
Насколько я знаю, питону абсолютно без разницы как вы пишете кодировку. Лично я пишу:
Или так:
Результат один и тот же. А проблемы с Unicode я решаю так:
|
Автор: pythonwin 29.10.2011, 12:16 |
это неправильный метод. ниже выступление Юревича на rupy.ru 2007 об юникоде http://www.rupy.ru/static/files/07/02/12/rupyru2007-yurevich-unicode.pdf http://www.rupy.ru/static/files/07/02/12/rupyru2007-yurevich-unicode-thesis.pdf |
Автор: drLans 21.2.2012, 16:57 | ||||||||||
Товарищи, помогите прояснить несколько вопросов по кодировкам. Дело происходит в Windows 7, Python 2.7. 1. Какой кодировкой print декодирует байты для вывода в человеко-понятном виде в этом случае:
Что используется, один из уникодов (utf-8, utf-16, ...), cp1251, 866, что-либо ещё? Или это зависит от текущей локали?
Или используется это?
Или это?
2. Есть файл с русскими символами, и при открытии его в Notepad++ его кодировка определяется как ANSI. Подскажите, что это за кодировка такая? Где можно увидеть её таблицу? И как с ней работать из python? 3. Можно ли как-то узнать, в какой кодировке закодирована некая строка? |
Автор: Karadul 21.2.2012, 19:16 | ||
Ух ты, мою тему 2х летней давности апнули. Времена проходят, а проблемы остаются теми же ![]() drLans, a у тебя не юникод, так что он выводится как есть байт в байт, то есть в кодировке исходника (в случае repr). В случае print - имхо декодируется в кодировку сосноли. Ах да, есть знатный костылик на случай, если надо таки вывести любые байты на stdout (например, что из сети получил - то и выдал).
|