|
136 / 48 / 2
Регистрация: 31.07.2014
Сообщений: 238
|
|
Декодирование русских символов18.12.2015, 23:10. Показов 4337. Ответов 12
Метки нет (Все метки)
Привет народ. Парсю тут сайт, в учебных целях, и столкнулся с тем, что если вытягивать оттуда русский текст он представляется в виде кодов отдельных символов (пример: 147 \235.\241.,где 147 и точки реально присутствуют в тексте, а \235 это л, \241 с. Вытягиваю страничку с помощью Network.HTTP.simpleHTTP, парсю с помощью Text.HTML.TagSoup . Пробовал использовать Data.Encoding.decodeString , но только коды поменялись (пробовал все разумные кодировки (cp1251, utf8, utf16, ASCII, KOI8R). В хэдере документа написано, что кодировка windows-1251, эту пробовал в первую очередь, получаю такие коды: 147 \204.\211..
Думал сначала, может у меня консоль барахлит, кодироки не поддерживает - записал результат в файл - то-же. Хотел еще на винде попробовать, но там чёто пакет encoding отказался ставиться, зависимости не разрешаются вроде, забил на это (а без перекодирования тоже коды). Есть идеи?
0
|
|
| 18.12.2015, 23:10 | |
|
Ответы с готовыми решениями:
12
Декодирование символов Как настроить ввод русских символов и в дальнейшем вывод этих символов
|
| 18.12.2015, 23:22 | |
|
есть две идеи:
1) работать с сайтом с помощью селениума - у хаскелла есть подходящие библиотеки. На форуме где-то есть тема, где есть код работы с selenium+haskell 2) попытаться каким-нибудь php дернуть нужную страницу - там 4 строки кода. Легко гуглится. Если там такая же проблема, то "виноват сайт, а не хаскелл"
0
|
|
|
136 / 48 / 2
Регистрация: 31.07.2014
Сообщений: 238
|
|
| 19.12.2015, 13:07 [ТС] | |
|
Попробовал wget +less - те же коды.
Конечно, есть шанс, что силениум будет не просто возвращать файл страницы, а фоново заниматься кодировками, но маловероятно. Есть еще какие нибудь варианты? Силениум это просто с пушки по воробьям.
0
|
|
|
136 / 48 / 2
Регистрация: 31.07.2014
Сообщений: 238
|
|
| 19.12.2015, 13:14 [ТС] | |
|
Вот конкретно вот эту ссылку парсю
0
|
|
|
Модератор
|
|||||||||||||||||||||
| 19.12.2015, 16:39 | |||||||||||||||||||||
|
В Haskell (и, в других языках, создатели которых билгейсохейтеры) с национальными кодировками наблюдаются некоторые траблы. Да, мы должны это признать. Увы. Ещё и ситуация от версии к версии компилятора меняется.
Пакетом encoding вообще лучше не пользоваться, он даже не включён в stackage-сборки. Для перекодирования рекомендуется использовать text-icu которая юзает сишную библиотеку ICU, которую вначале надо поставить самому. Не юзал. Для конвертации из под винды я просто использовал Win API. Пардон за лишние импорты - это выдранный кусок, непричёсанный Кликните здесь для просмотра всего текста
С неанглискими буквами нужно помнить, что: - сам исходник должен быть в кодировке utf-8 без BOM. - Текст (особенно большой) лучше не обрабатывать в String, но в Text, в крайнем случае ByteString. - Что бы текстовые строковые литералы в исходнике "сами" конвертировались в Text или ByteString, нужно вначале вставить прагму
Но, всё же, если Вы создадите
А вот пример, в котором я прочитал страничку в кодировке 1251 в файл с помощью simpleHTTP, и оно сохранилось в 1251
p.s. Уточняю: я не гуру в интернационализации Haskell. Если кто хочет мне показать как я неправ, то я только за. В основном интересно под винду.
1
|
|||||||||||||||||||||
|
23 / 23 / 3
Регистрация: 21.06.2014
Сообщений: 36
|
||||||
| 19.12.2015, 19:42 | ||||||
|
Вот рабочий вариант.
1
|
||||||
|
Модератор
|
||||||
| 19.12.2015, 20:54 | ||||||
|
Причесал. Код ниже читает (из под винды) страницу в кодировке 1251, преобразует в utf-8 и записывает в файл.
На этот раз, с пайпами. Кликните здесь для просмотра всего текста
p.s. Что интересно: Win API-шная функция multiByteToWideChar давно в пакете Win32 описана, а симметричная ей wideCharToMultiByte нет. Приходится ручками. Не по теме: Определённо, заговор!
1
|
||||||
|
136 / 48 / 2
Регистрация: 31.07.2014
Сообщений: 238
|
|||
| 22.12.2015, 11:30 [ТС] | |||
) или не встанет крайняя нужда в этом (lazy evaluation) Если что нарою - отпишусь здесь.
0
|
|||
|
Модератор
|
||
| 22.12.2015, 13:22 | ||
|
1
|
||
|
136 / 48 / 2
Регистрация: 31.07.2014
Сообщений: 238
|
||||||
| 23.12.2015, 01:47 [ТС] | ||||||
|
Да, кажется icu это сможет, в Data.Text.ICU.Convert есть ф-я toUnicode, которой передаешь кодировку и строку и на выходе строка в другой кодировке, но списка поддерживаемых кодировок я не в хаскедже не на их сайте не нашел, просто строкой пишешь, что тебе нужно. Но в своем проекте я тоже её не буду использовать т.к. парсер названия кодировки в кодировку... не чистый! IO Convert, зачем бы это небыло. И мне придется перекраивать всю программу, чтобы протащить этот побочный эффект, так что уже в другой раз.
Добавлено через 2 часа 36 минут Короче посидел я, подумал, вспомнил, что всё гениальное просто и написал вот это:
![]() Добавлено через 44 минуты P.S. на пробном примере ф-я показала себя хорошо, а в бою плохо - потому что в реальном тексте есть запятые и тд и если их не перекодировать то смешанная кодировка в строке получается. По кодам узнал Data.Encoding - я уже получал такой результат, значит он правильно работает, только такая особенность, что если выводишь только русские символы - всё норм, если мешаешь с английскими (хоть и ко всей строке перекодирование применено) то русские становятся кодами.
1
|
||||||
|
Модератор
|
||||||||
| 23.12.2015, 11:25 | ||||||||
|
NoobsEnslaver, Вам никто не мешает сделать перекодировку всей второй половины таблицы 1251 в unicode, но делать это на списках - тормоза, лучше сделать таблицу в Data.Vector.Unboxed (пакет vector).
Отображение кодов символов показывает что это юникод. Вообще, работа с большими объёмами текста предпочтительней в Text, особенно если выполняется ещё чтото, кроме "отсчипывания" начала строки и добавления символа к началу строки. Всё остальное на односвязанном списке тормоза. Добавлено через 1 час 34 минуты Однако, про data Converter сказано : Note: this structure is not thread safe.
0
|
||||||||
| 23.12.2015, 11:25 | |
|
Помогаю со студенческими работами здесь
13
Декодирование HTML символов на яваскрипт
Перевести строку, состоящую из русских символов в строку из латинских символов, используя translit Перехват русских символов Ввод русских символов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3.
Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|