|
Модераторы: Daevaorn |
|
HellanD |
|
|||
Опытный Профиль Группа: Участник Сообщений: 443 Регистрация: 16.5.2006 Где: Киев Репутация: 1 Всего: 2 |
Есть у меня кусок кода, который читает данные(они на русском языке) из файла:
А он мне выдает вот такое... Можете обьяснить причину? В начале кода у меня стоит # -*- 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 |
|
|||
Нереварин Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 7 Всего: 49 |
Попробуй:
Если при декодировании "узкой" строки в юникод не задана кодировка, т.е. используется кодек по-умолчанию ascii, который, разумеется, не понимает русских символов. Этот кодек выбирается один раз при стартапе питона и потом менять его нельзя. Потому пользуйся методами decode/encode. Можешь ещё помедитировать на код метода setencoding() в файле Lib/site.py в том каталоге, где у тебя установлен питон Это относится только к кодировке файла с исходным кодом. Об остальном ты должен позаботиться сам -------------------- Не смей читать мою подпись!!! |
|||
|
||||
HellanD |
|
|||
Опытный Профиль Группа: Участник Сообщений: 443 Регистрация: 16.5.2006 Где: Киев Репутация: 1 Всего: 2 |
Попробовал заюзать
Есть проблемка... Он в конец строки добавляет казяблик(я так понимаю символ окончания строки), а это не хорошо...Я и так от них избавлялся с помощью страшного file.readline()[:-1]....(Кстате а это как то можно улутшить??) Добавлено через 4 минуты и 15 секунд Стоп на счет казябликов сори, сам напутал....По ошибке убрал [:-1] |
|||
|
||||
pythonwin |
|
|||
Эксперт Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
HellanD, можешь ещё посмотреть Использование Unicode в Python
|
|||
|
||||
srd |
|
||||
Нереварин Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 7 Всего: 49 |
Хм. Если в конце файла нету символов перевода строки, то предпоследний вызов readline() вернёт строку без "\n" на конце. И в этом случае [:-1] уничтожит последний значащий символ. Можно, например, воспользоваться методом rstrip()
Добавлено через 5 минут и 51 секунду pythonwin, Ух, ты постоянно где-то откапываешь ссылки на интересные материалы. -------------------- Не смей читать мою подпись!!! |
||||
|
|||||
pythonwin |
|
|||
Эксперт Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
насчет интересных ссылок: 1) они постепенно накапливаются 2) можно многое почерпнуть читая http://python.com.ua/ru/links/blogi/ и статьи на http://python.com.ua/ru/articles/Python/ |
|||
|
||||
HellanD |
|
|||
Опытный Профиль Группа: Участник Сообщений: 443 Регистрация: 16.5.2006 Где: Киев Репутация: 1 Всего: 2 |
Вот помню что точно когдато над ним медетировал....Теперь тесты на моей тачке запускаются а на другой нет....Можете еще подробно написать как над ним можно помедетировать? |
|||
|
||||
Ulysses4j |
|
||||||
Опытный Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 3 Всего: 10 |
Цитата по предложенному pythonwin материалу "Использование Unicode в Python" (стр. 7). -------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
||||||
|
|||||||
HellanD |
|
|||
Опытный Профиль Группа: Участник Сообщений: 443 Регистрация: 16.5.2006 Где: Киев Репутация: 1 Всего: 2 |
Да я то понял...Предложение такое откатить назад либу site.py...И решить вопрос иначе (А если кодировка не 'utf-8'?? по моему "cp1251")
|
|||
|
||||
pythonwin |
|
|||
Эксперт Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
вот статья о питоне+unicode == All About Python and Unicode
Добавлено через 4 минуты и 10 секунд Как узнать кодировку? Добавлено через 6 минут и 56 секунд http://chardet.feedparser.org/ Добавлено через 9 минут и 29 секунд PS администрации - закрепите, пожалуйста, тему |
|||
|
||||
HellanD |
|
|||
Опытный Профиль Группа: Участник Сообщений: 443 Регистрация: 16.5.2006 Где: Киев Репутация: 1 Всего: 2 |
Еще вопрос связанный с кодировками... Вообщем захотел я получит доступ к кнопке "пуск" на рабочем столе (Винда русская ХР), узнал с помощью проги winspectr ее дескриптор, а по нему с помощью функции getWindowText узнал название окна (оно на русском и питон это выводит козябликами)....
Хочу теперь найти дискриптор с помощю функции findwindow а она ничего не может найти (Ну оно и понятно я название окна передаю не понятно какое....) Подскажите плиз. Буду благодарен |
|||
|
||||
pythonwin |
|
|||
Эксперт Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
HellanD, это тебе в GUI или вариант "поиграйся" decode и encode
|
|||
|
||||
HellanD |
|
|||
Опытный Профиль Группа: Участник Сообщений: 443 Регистрация: 16.5.2006 Где: Киев Репутация: 1 Всего: 2 |
Ну не знаю причем тут ГУИ вообще...Англиские контролы ловяться на раз два три! А вот с decode и encode игрался - но не долго всегда получал эрор! Типа что не аски декодируешь!
|
|||
|
||||
pythonwin |
|
|||
Эксперт Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
HellanD, создай отдельную тему и выложи туда код
|
|||
|
||||
stoune |
|
||||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 9.5.2008 Репутация: нет Всего: нет |
Курить здесь http://www.faqs.org/docs/diveintopython/kgp_unicode.html Вкратце, создать sitecustomize.py файл в site-packages и вернуть кодировку по умолчанию, например utf8 |
||||
|
|||||
pythonwin |
|
|||
Эксперт Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
это не правильно... как правильно читать по ссылкам: http://www.rupy.ru/member/5/#paper-6 http://www.rupy.ru/static/files/07/02/12/r...ich-unicode.pdf Добавлено через 54 секунды для определения кодировки текста в файле посмотри http://chardet.feedparser.org/ |
|||
|
||||
iale |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 31.3.2009 Репутация: нет Всего: нет |
Видимо давно не было проблем с кодировками. Недавно начал изучать python и есть непонимание работы с кодировками, все выше перечисленные доки я прочитал. Имеем такой код:
Версия - Python 2.5.2
Результат:
Но если выполнять в интерактивном режиме, то:
Результат:
Вопрос почему разная длина, если тип один и тот же? Это сообщение отредактировал(а) iale - 31.3.2009, 14:28 |
||||||||
|
|||||||||
_Viper_ |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 87 Регистрация: 8.11.2006 Репутация: 10 Всего: 11 |
В интерактивном режиме другая кодировка, не utf-8, поэтому и длинна другая.
|
|||
|
||||
Vinata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 26.11.2009 Где: Пенза Репутация: нет Всего: нет |
Здравствуйте, помогите пожалуйста, у меня преподоет молодой аспирант, который не рассказывает и не объясняет.. Нужно написать прогу на питоне из csv в базу данных, с распознованием знаков препинание и разделителя столбцов в csv.. помогите пожалуйсиа
|
|||
|
||||
Ch0bits |
|
||||
Python Dev. Профиль Группа: Завсегдатай Сообщений: 2124 Регистрация: 21.2.2005 Где: Казань Репутация: нет Всего: 62 |
У меня такая проблема. Использую консоль виндовс cmd.exe, если выводить в нее текст в юникоде через print то все в порядке.
А вот при возбуждении исключений выходит такой косяк.
Как это понимать? Исключения не поддерживают юникод? O_o |
||||
|
|||||
Virtuos86 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 4.12.2009 Где: Томская обл. Репутация: нет Всего: нет |
Насколько я понимаю, ответ на этот вопрос раскрыли здесь. Это сообщение отредактировал(а) Virtuos86 - 14.1.2010, 05:44 |
|||
|
||||
Karadul |
|
|||
Опытный Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: нет Всего: 1 |
||||
|
||||
pythonwin |
|
|||
Эксперт Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
это не правильно и это можно прочитать здесь Презентация: pdf 292.2 Кб Тезисы: pdf 265.6 Кб |
|||
|
||||
Karadul |
|
|||
Опытный Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: нет Всего: 1 |
А где именно это там написано? Там написано только то, что не надо менять ничего в site.py, иначе прога будет работать только на компе разработчика. Может мне кажется, но можно как-то поставить default encoding в самой программе?
|
|||
|
||||
pythonwin |
|
|||
Эксперт Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
Karadul, посмотри, пожалуйста, ссылки в моём посте чуть выше - там есть ответы.
|
|||
|
||||
Virtuos86 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 4.12.2009 Где: Томская обл. Репутация: нет Всего: нет |
Может нужно писать: #! -*- coding: utf-8 -*- Потому без бэнга у Вас просто комментарий написан по сути. |
|||
|
||||
mrDoctorWho |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 28.10.2011 Репутация: нет Всего: нет |
Насколько я знаю, питону абсолютно без разницы как вы пишете кодировку. Лично я пишу:
Или так:
Результат один и тот же. А проблемы с Unicode я решаю так:
|
||||||||
|
|||||||||
pythonwin |
|
|||
Эксперт Профиль Группа: Участник Сообщений: 2529 Регистрация: 18.4.2006 Где: за компом Репутация: 14 Всего: 36 |
это неправильный метод. ниже выступление Юревича на rupy.ru 2007 об юникоде Использование Unicode в Python Использование Unicode в Python. тезисы |
|||
|
||||
drLans |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 11.8.2006 Репутация: нет Всего: нет |
Товарищи, помогите прояснить несколько вопросов по кодировкам. Дело происходит в Windows 7, Python 2.7.
1. Какой кодировкой print декодирует байты для вывода в человеко-понятном виде в этом случае:
Что используется, один из уникодов (utf-8, utf-16, ...), cp1251, 866, что-либо ещё? Или это зависит от текущей локали?
Или используется это?
Или это?
2. Есть файл с русскими символами, и при открытии его в Notepad++ его кодировка определяется как ANSI. Подскажите, что это за кодировка такая? Где можно увидеть её таблицу? И как с ней работать из python? 3. Можно ли как-то узнать, в какой кодировке закодирована некая строка? Это сообщение отредактировал(а) drLans - 21.2.2012, 22:04 |
||||||||||
|
|||||||||||
Karadul |
|
|||
Опытный Профиль Группа: Участник Сообщений: 378 Регистрация: 18.5.2006 Репутация: нет Всего: 1 |
Ух ты, мою тему 2х летней давности апнули. Времена проходят, а проблемы остаются теми же ))
drLans, a у тебя не юникод, так что он выводится как есть байт в байт, то есть в кодировке исходника (в случае repr). В случае print - имхо декодируется в кодировку сосноли. Ах да, есть знатный костылик на случай, если надо таки вывести любые байты на stdout (например, что из сети получил - то и выдал).
Это сообщение отредактировал(а) Karadul - 21.2.2012, 19:19 |
|||
|
||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Python: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |