Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 21, 2013 13:51:25

kise97
Зарегистрирован: 2012-05-31
Сообщения: 83
Репутация: +  4  -
Профиль  

Проблема с кодировкой

Привет.

Есть код

content = "Тут строка большая, не буду ее тут писать..."
print content # Выводит нормально 
print chardet.detect(content) #{'confidence': 0.23266364493766054, 'encoding': 'UTF-8'}
content = re.sub("(?i)[^-0-9a-zа-яё«»\&\;\/\<\>\.,\s\(\)\*:!\?]", "", content)
print content #кракозябры
print chardet.detect(content) #{'confidence': 0.23266364493766054, 'encoding': 'ISO-8859-5'}

Что делать? Я уже реально задолбался с этими кодировками в питоне… (может кто знает, в 3.* все норм с кодировками?)
Python 2.7, в начале файла “#coding:utf-8”, файл в utf-8, ide - pycharm

Спасибо.

Офлайн

#2 Апрель 21, 2013 15:35:56

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблема с кодировкой

>>> Я уже реально задолбался с этими кодировками в питоне ….Python 2.7, в начале файла “#coding:utf-8”, файл в utf-8, ide - pycharm

ОС какая?



Офлайн

#3 Апрель 21, 2013 15:37:41

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблема с кодировкой

kise97
в начале файла “#coding:utf-8”
Если в начале именно это, я Вас огорчу сильно, должно то быть
# -*- coding: utf-8 -*-



Офлайн

#4 Апрель 21, 2013 16:40:12

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Проблема с кодировкой

если python2 то перед кавычкой должно быть u для юникодного литерала
или вначале файла добавить from __future__ import unicode_literals

FishHook
Если в начале именно это, я Вас огорчу
вообще там гибче: первая или вторая строка должна отвечать регекспу
coding[:=]\s*([-\w.]+)
http://www.python.org/dev/peps/pep-0263/

kise97
может кто знает, в 3.* все норм с кодировками?
в 3.* получше, ибо:
строковые литералы по умолчанию юникодные
кодировка файла по умолчанию utf-8

Отредактировано bismigalis (Апрель 21, 2013 17:50:21)

Офлайн

#5 Апрель 22, 2013 11:20:09

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

Проблема с кодировкой

В python 2.7 строка “а-яё” в utf-8 - это ‘\xd0\xb0-\xd1\x8f\xd1\x91’. В regexp для 8-битных строк каждый байт обрабатывается отдельно.
Короче, надо все переводить в unicode и не забывать ставить r“…”.

content = re.sub(ur"(?i)[^-0-9a-zа-яё«»\&\;\/\<\>\.,\s\(\)\*:!\?]", u"", content.decode("utf-8"))



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version