Модераторы: pythonwin, Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с кодировками, ПОМОГИТЕ 
:(
    Опции темы
HellanD
Дата 11.6.2007, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: 1
Всего: 2



Есть у меня кусок кода, который читает данные(они на русском языке) из файла:
Код

self.name     = unicode(file.readline()[:-1])



А он мне выдает вот такое... Можете обьяснить причину? В начале кода у меня стоит # -*- coding: cp1251 -*-

self.name     = unicode(file.readline()[:-1])
UnicodeDecodeError: 'ascii' codec can't decode byte 0xcf in position 0: ordinal not in range(128)


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
srd
Дата 11.6.2007, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: 7
Всего: 49



Попробуй:
Код

# Здесь предполагается, что у тебя файл в кодировке cp1251
self.name     = file.readline()[:-1].decode("cp1251")


Цитата(HellanD @  11.6.2007,  18:23 Найти цитируемый пост)
А он мне выдает вот такое... Можете обьяснить причину?

Если при декодировании "узкой" строки в юникод не задана кодировка, т.е. используется кодек по-умолчанию ascii, который, разумеется, не понимает русских символов. Этот кодек выбирается один раз при стартапе питона и потом менять его нельзя. Потому пользуйся методами decode/encode. Можешь ещё помедитировать на код метода setencoding() в файле Lib/site.py в том каталоге, где у тебя установлен питон smile

Цитата(HellanD @  11.6.2007,  18:23 Найти цитируемый пост)
# -*- coding: cp1251 -*-

Это относится только к кодировке файла с исходным кодом. Об остальном ты должен позаботиться сам smile



--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
HellanD
Дата 11.6.2007, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: 1
Всего: 2



Попробовал заюзать 
Код

self.name     = file.readline()[:-1].decode("cp1251") 

Есть проблемка... Он в конец строки добавляет казяблик(я так понимаю символ окончания строки), а это не хорошо...Я и так от них избавлялся с помощью страшного file.readline()[:-1]....(Кстате а это как то можно улутшить??)

Добавлено через 4 минуты и 15 секунд
Стоп на счет казябликов сори, сам напутал....По ошибке убрал [:-1]


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
pythonwin
Дата 11.6.2007, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



HellanD, можешь ещё посмотреть Использование Unicode в Python
PM WWW GTalk Jabber   Вверх
srd
Дата 11.6.2007, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: 7
Всего: 49



Цитата(HellanD @  11.6.2007,  19:35 Найти цитируемый пост)
Я и так от них избавлялся с помощью страшного file.readline()[:-1]

Хм. Если в конце файла нету символов перевода строки, то предпоследний вызов readline() вернёт строку без "\n" на конце. И в этом случае [:-1] уничтожит последний значащий символ.

Можно, например, воспользоваться методом rstrip()
Код

>>> "test".rstrip("\n")
'test'
>>> "test\n".rstrip("\n")
'test'
>>> "\n".rstrip("\n")
''


Добавлено через 5 минут и 51 секунду
pythonwin
Ух, ты постоянно где-то откапываешь ссылки на интересные материалы. smile


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
pythonwin
Дата 11.6.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Цитата(srd @  11.6.2007,  16:06 Найти цитируемый пост)
Ух, ты постоянно где-то откапываешь ссылки на интересные материалы. smile 

насчет интересных ссылок:
1) они постепенно накапливаются
2) можно многое почерпнуть читая http://python.com.ua/ru/links/blogi/ и статьи на http://python.com.ua/ru/articles/Python/

PM WWW GTalk Jabber   Вверх
HellanD
Дата 12.6.2007, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: 1
Всего: 2



Цитата

Можешь ещё помедитировать на код метода setencoding() в файле Lib/site.py


Вот помню что точно когдато над ним медетировал....Теперь тесты на моей тачке запускаются а на другой нет....Можете еще подробно написать как над ним можно помедетировать? smile 


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
Ulysses4j
Дата 12.6.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 6.6.2007
Где: Ростов-на-Дону

Репутация: 3
Всего: 10



Цитата(HellanD @ 12.6.2007,  09:46)
Цитата
Можешь ещё помедитировать на код метода setencoding() в файле Lib/site.py

Вот помню что точно когдато над ним медетировал....Теперь тесты на моей тачке запускаются а на другой нет....

Цитата
>>> unicode(regular_string)
UnicodeDecodeError: ’ascii’ codec can’t decode byte ...
  • Неправильное решение: исправить 'ascii' в site.py на используемую кодировку
  • Правильное решение: использовать явную перекодировку
    >>> unicode(regular_string, 'utf-8')
    либо
    >>> regular_string.decode('utf-8')

Цитата по предложенному pythonwin материалу "Использование Unicode в Python" (стр. 7).


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
HellanD
Дата 12.6.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: 1
Всего: 2



Да я то понял...Предложение такое откатить назад либу site.py...И решить вопрос иначе (А если кодировка не 'utf-8'?? по моему "cp1251")


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
pythonwin
Дата 12.6.2007, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



вот статья о питоне+unicode == All About Python and Unicode

Добавлено через 4 минуты и 10 секунд
Как узнать кодировку?

Добавлено через 6 минут и 56 секунд
http://chardet.feedparser.org/

Добавлено через 9 минут и 29 секунд
PS администрации - закрепите, пожалуйста, тему smile
PM WWW GTalk Jabber   Вверх
HellanD
Дата 29.6.2007, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: 1
Всего: 2



Еще вопрос связанный с кодировками... Вообщем захотел я получит доступ к кнопке "пуск" на рабочем столе (Винда русская ХР), узнал с помощью проги winspectr ее дескриптор, а по нему с помощью функции getWindowText узнал название окна (оно на русском и питон это выводит козябликами)....
Хочу теперь  найти дискриптор с помощю функции findwindow а она ничего не может найти (Ну оно и понятно я название окна передаю не понятно какое....) Подскажите плиз. Буду благодарен


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
pythonwin
Дата 29.6.2007, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



HellanD, это тебе в GUI или вариант "поиграйся" decode и encode
PM WWW GTalk Jabber   Вверх
HellanD
Дата 29.6.2007, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: 1
Всего: 2



Ну не знаю причем тут ГУИ вообще...Англиские контролы ловяться на раз два три! А вот с decode и encode игрался - но не долго всегда получал эрор! Типа что не аски декодируешь!


--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
pythonwin
Дата 29.6.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



HellanD, создай отдельную тему и выложи туда код smile

PM WWW GTalk Jabber   Вверх
stoune
Дата 9.5.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 9.5.2008

Репутация: нет
Всего: нет



Цитата(HellanD @ 11.6.2007,  11:23)
Есть у меня кусок кода, который читает данные(они на русском языке) из файла:
Код

self.name     = unicode(file.readline()[:-1])



А он мне выдает вот такое... Можете обьяснить причину? В начале кода у меня стоит # -*- coding: cp1251 -*-

self.name     = unicode(file.readline()[:-1])
UnicodeDecodeError: 'ascii' codec can't decode byte 0xcf in position 0: ordinal not in range(128)

Курить здесь http://www.faqs.org/docs/diveintopython/kgp_unicode.html

Вкратце, создать sitecustomize.py файл в site-packages и вернуть кодировку по умолчанию, например utf8
PM MAIL   Вверх
Google
  Дата 27.5.2019, 11:20 (ссылка)  





  Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3454 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.