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

Поиск:

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


Эксперт
****


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

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



Цитата(stoune @  9.5.2008,  18:39 Найти цитируемый пост)
Вкратце, создать sitecustomize.py файл в site-packages и вернуть кодировку по умолчанию, например utf8 

это не правильно...
как правильно читать по ссылкам:
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/
PM WWW GTalk Jabber   Вверх
iale
Дата 31.3.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Видимо давно не было проблем с кодировками. Недавно начал изучать python и есть непонимание работы с кодировками, все выше перечисленные доки я прочитал. Имеем такой код:
Версия - Python 2.5.2
Код

# -*- coding: utf-8 -*-

str1 ='привет';
str2 = u'привет';
str3 = unicode('привет', 'utf-8');

print(len(str1));
print(len(str2));
print(len(str3));

print(type(str1));
print(type(str2));
print(type(str3));


Результат:
Код

12
6
6
<type 'str'>
<type 'unicode'>
<type 'unicode'>


Но если выполнять в интерактивном режиме, то:
Код

str1 ='привет';
print(len(str1));
print(type(str1));
 
Результат:
Код

6
<type 'str'>

Вопрос почему разная длина, если тип один и тот же?


Это сообщение отредактировал(а) iale - 31.3.2009, 14:28
PM MAIL   Вверх
_Viper_
Дата 1.4.2009, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В интерактивном режиме другая кодировка, не utf-8, поэтому и длинна другая.
PM MAIL   Вверх
Vinata
Дата 26.11.2009, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте, помогите пожалуйста, у меня преподоет молодой аспирант, который не рассказывает и не объясняет.. Нужно написать прогу на питоне из csv в базу данных, с распознованием знаков препинание и разделителя столбцов в csv.. помогите пожалуйсиа smile  smile  smile  smile  smile 
PM MAIL   Вверх
Ch0bits
Дата 31.12.2009, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

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



У меня такая проблема. Использую консоль виндовс cmd.exe, если выводить в нее текст в юникоде через print то все в порядке.
Код

print u'Привет'

А вот при возбуждении исключений выходит такой косяк.
Код

>>> raise TypeError(u'Привет')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: <unprintable TypeError object>

Как это понимать? Исключения не поддерживают юникод? O_o
PM WWW   Вверх
Virtuos86
Дата 14.1.2010, 05:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.12.2009
Где: Томская обл.

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



 
Цитата(Ch0bits @ 31.12.2009,  09:10)
Как это понимать? Исключения не поддерживают юникод? O_o

Насколько я понимаю, ответ на этот вопрос раскрыли здесь.

Это сообщение отредактировал(а) Virtuos86 - 14.1.2010, 05:44
PM MAIL Jabber   Вверх
Karadul
Дата 10.2.2010, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(srd @  11.6.2007,  11:51 Найти цитируемый пост)
Можешь ещё помедитировать на код метода setencoding() в файле Lib/site.py в том каталоге, где у тебя установлен питон

А нельзя вместо этого написать вначале программы setdefaulencoding четотам и писать как раньше?
PM MAIL   Вверх
pythonwin
Дата 10.2.2010, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Karadul @  10.2.2010,  20:36 Найти цитируемый пост)
А нельзя вместо этого написать вначале программы setdefaulencoding четотам и писать как раньше? 

это не правильно и это можно прочитать здесь
Презентация: pdf 292.2 Кб
Тезисы: pdf 265.6 Кб
PM WWW GTalk Jabber   Вверх
Karadul
Дата 16.2.2010, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А где именно это там написано? Там написано только то, что не надо менять ничего в site.py, иначе прога будет работать только на компе разработчика. Может мне кажется, но можно как-то поставить default encoding в самой программе?
PM MAIL   Вверх
pythonwin
Дата 16.2.2010, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Karadul, посмотри, пожалуйста, ссылки в моём посте чуть выше - там есть ответы.
PM WWW GTalk Jabber   Вверх
Virtuos86
Дата 11.4.2010, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.12.2009
Где: Томская обл.

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



Цитата(iale @ 31.3.2009,  14:24)
 # -*- coding: utf-8 -*-

 Может нужно писать:
#! -*- coding: utf-8 -*-
Потому без бэнга у Вас просто комментарий написан по сути.
PM MAIL Jabber   Вверх
mrDoctorWho
Дата 29.10.2011, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Virtuos86 @  11.4.2010,  20:28 Найти цитируемый пост)
Может нужно писать:
#! -*- coding: utf-8 -*-
Потому без бэнга у Вас просто комментарий написан по сути.


Насколько я знаю, питону абсолютно без разницы как вы пишете кодировку.

Лично я пишу:
Код

# /* coding: utf-8 */


Или так:
Код

# coding: utf-8


Результат один и тот же.

А проблемы с Unicode я решаю так: 
Код

import sys
reload(sys).setdefaultencoding("utf-8")

PM MAIL   Вверх
pythonwin
Дата 29.10.2011, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(mrDoctorWho @  29.10.2011,  14:54 Найти цитируемый пост)
А проблемы с Unicode я решаю так: 

это неправильный метод. ниже выступление Юревича на rupy.ru 2007 об юникоде
Использование Unicode в Python
Использование Unicode в Python. тезисы
PM WWW GTalk Jabber   Вверх
drLans
Дата 21.2.2012, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Товарищи, помогите прояснить несколько вопросов по кодировкам. Дело происходит в Windows 7, Python 2.7.

1. Какой кодировкой print декодирует байты для вывода в человеко-понятном виде в этом случае:
Код

# -*- coding: utf-8 -*-
a = 'строка'
print a, repr(a)

Код

строка '\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0'

Что используется, один из уникодов (utf-8, utf-16, ...), cp1251, 866, что-либо ещё? 
Или это зависит от текущей локали?
Код

locale.getpreferredencoding()

Или используется это?
Код

sys.getdefaultencoding()  

Или это?
Код

sys.stdout.encoding

2. Есть файл с русскими символами, и при открытии его в Notepad++ его кодировка определяется как ANSI.
Подскажите, что это за кодировка такая? Где можно увидеть её таблицу?
И как с ней работать из python?

3. Можно ли как-то узнать, в какой кодировке закодирована некая строка?

Это сообщение отредактировал(а) drLans - 21.2.2012, 22:04
PM MAIL   Вверх
Karadul
Дата 21.2.2012, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ух ты, мою тему 2х летней давности апнули. Времена проходят, а проблемы остаются теми же smile))

drLansa у тебя не юникод, так что он выводится как есть байт в байт, то есть в кодировке исходника (в случае repr). В случае print - имхо декодируется в кодировку сосноли.

Ах да, есть знатный костылик на случай, если надо таки вывести любые байты на stdout (например, что из сети получил - то и выдал).

Код

sys.stdout = codecs.getwriter('UTF-8')(sys.stdout)




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


 




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


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

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