Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 10, 2016 13:52:56

BearPro
Зарегистрирован: 2015-09-09
Сообщения: 46
Репутация: +  0  -
Профиль   Адрес электронной почты  

Обработка строк с русскими символами

Снова проблема.
Научился получать все комментарии к посту на pikabu.ru (предыдущую проблему решил изящно: сначала оператору придётся открыть браузер, там кликнуть на “показать ещё n комментариев”, и потом сохранить html-код страницы в файл - с ним и работаю сейчас).
Абсолютное большинство комментариев написано на русском языке, и это не вызывало проблем при попытке текст комментария присвоить атрибуту класса и потом ещё напечатать.
Моя задача состоит в том, что бы найти комменты, в которых есть определённое ключевое слово, написанное так же на русском языке.
И вот при попытке выполнить конструкцию:

 def filterByContent(commentList):
    for comment in commentList:
        content = comment.commentText.lower()
        if 'ключевое слово' in content:
            doSomething()
Я получаю трейсбек:
 Traceback (most recent call last):
  File "C:\Users\BearPro\documents\visual studio 2015\Projects\FreeShow\FreeShow\FreeShow.py", line 5, in <module>
    import autoFilter as filter
  File "C:\Users\BearPro\documents\visual studio 2015\Projects\FreeShow\FreeShow\autoFilter.py", line 14
SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xf3 in position 0: invalid continuation byte
# line 14 - как раз строка с условием

Мне, конечно, и раньше доводилось работать с русскими символами. Тогда это решалось словами
  # -*- coding: utf-8 -*-
в начале программы. Я не понимал, как это работает, почему это работает, особенно на винде. Но это работало.
Теперешняя же моя программа сложнее чем все предшественники, состоит из кучи модулей (три, в частности -_-), и простое понатыкивание ‘# -*- coding: utf-8 -*-’ в начале каждого модуля меня уже не спасло от ошибки.
Что делать?

Отредактировано BearPro (Дек. 10, 2016 13:53:31)

Офлайн

#2 Дек. 11, 2016 03:53:04

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Обработка строк с русскими символами

Исходники перевёл в utf-8 при этом?



Офлайн

#3 Дек. 11, 2016 08:37:10

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Обработка строк с русскими символами

BearPro
Я не понимал, как это работает
Это главное.
1. Научитесь определять в какой кодировке у вас сохранен файл. проверьте что она соответствует ‘# -*- coding: utf-8 -*-.
2. Рекомендую отказаться от visual studio 2015 как среды разработки. Мне не удалось сразу научить ее сохранять файлы в обычном utf-8. Возьмите ide для питона.



Офлайн

#4 Дек. 11, 2016 21:16:58

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Обработка строк с русскими символами

doza_and
в обычном utf-8.

Да сфигали “utf-8” обычная?

Есть нормальные: 1251, 866, Unicode.

utf-8 это извращение, “ни приведи Господь”, Созданное только для того чтоб трафика в инетах поменьше тратить.

Офлайн

#5 Дек. 12, 2016 11:39:47

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Обработка строк с русскими символами

Iskatel
Это что за бред блин ! Думай что пишешь.

Iskatel
Да сфигали “utf-8” обычная?
Давай так, есть условно 3 типа основных операционных систем - Windows, Mac Os, Linux - 2 из 3 используют utf-8 по умолчанию. Выводы очевидны.
Iskatel
Есть нормальные: 1251, 866,
Ага, очень нормальные. И таких нормальных десятки что бы удовлетворить все языки мира.
Iskatel
Unicode
Это не кодировка вообще.
Iskatel
Есть нормальные: 1251, 866
а то что в русскоязычной винде эти две кодировки существуют одновременно это нормально? Ага, супер удобно.
Iskatel
utf-8 это извращение
поясни
Iskatel
Созданное только для того чтоб трафика в инетах поменьше тратить.
оно вообще не для этого создавалось. Совсем.

P.S. за такое мракобесие FishHook банит с формулировкой “за тупость”. И вот тут я его прям поддержать хочу.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#6 Дек. 12, 2016 20:39:16

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Обработка строк с русскими символами

JOHN_16

Откуда столько злости, и даже желание забанить, какбудто из за моего сообщения кодировку выпилят из всех ОС?

JOHN_16
поясни

Издержки работы, поныл я чуток… utf-8 не так то просто разпознать в hex - дампе, а в поврежденном вообще муть. Энаю, что тема не для этого форума, но вот написал о наболевшем, простите.

Отредактировано Iskatel (Дек. 12, 2016 20:39:50)

Офлайн

#7 Дек. 13, 2016 01:43:18

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Обработка строк с русскими символами

utf-8 - это одна из кодировок юникода. Юникод один, а кодировок для него несколько.

Iskatel
Есть нормальные: 1251, 866
Ну давай, запиши на любой из них иероглиф китайский или значок какой-нибудь типа самолёта.
А на utf-8 ты можешь записать и иероглиф, и значок, и всё что угодно. ࿊ Почему? А потому что она кодирует весь юникод, а в юникоде все символы - прошлые, настоящие и будущие.

Iskatel
utf-8 не так то просто разпознать в hex - дампе
utf-8 легко распознать, но для этого нужно узнать, как она устроена, и часто смотреть на её байты, и тогда ты её сразу будешь определять.



Отредактировано py.user.next (Дек. 13, 2016 01:52:44)

Офлайн

#8 Дек. 13, 2016 23:24:53

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Обработка строк с русскими символами

py.user.next
utf-8 легко распознать

Да, если знаешь что именно в этом кусочке, этого дампа, именно текст на utf-8, а не чтото еще.

py.user.next
но для этого нужно узнать, как она устроена
я же писал “Издержки работы” поверьте, знаю и не только ее.

Впрочем это все оффтопик, щас опять по мою душу придет злой JOHN_16

Зы. с самолетиками, слава Богу, дела иметь не приходилось.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version