Найти - Пользователи
Полная версия: Обработка строк с русскими символами
Начало » Python для новичков » Обработка строк с русскими символами
1
BearPro
Снова проблема.
Научился получать все комментарии к посту на 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 -*-’ в начале каждого модуля меня уже не спасло от ошибки.
Что делать?
py.user.next
Исходники перевёл в utf-8 при этом?
doza_and
BearPro
Я не понимал, как это работает
Это главное.
1. Научитесь определять в какой кодировке у вас сохранен файл. проверьте что она соответствует ‘# -*- coding: utf-8 -*-.
2. Рекомендую отказаться от visual studio 2015 как среды разработки. Мне не удалось сразу научить ее сохранять файлы в обычном utf-8. Возьмите ide для питона.
Iskatel
doza_and
в обычном utf-8.

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

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

utf-8 это извращение, “ни приведи Господь”, Созданное только для того чтоб трафика в инетах поменьше тратить.
JOHN_16
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 банит с формулировкой “за тупость”. И вот тут я его прям поддержать хочу.
Iskatel
JOHN_16

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

JOHN_16
поясни

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

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

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

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

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

Зы. с самолетиками, слава Богу, дела иметь не приходилось.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB