Бляди тоже ок, ага. Войти !bnw Сегодня Клубы

Мой маленький парсер логов, который берёт инпут из stdin, в какой-то момент постоянно начинает получать:

<stdin>: hGetLine: invalid argument (invalid byte sequence)

Сделал маленький пример на воспроизведение https://bitbucket.org/k_bx/infinite_getline , жду пока повторится.

#0YCC7G / @kb / 3658 дней назад

Пользователь String детектед.
#0YCC7G/7KC / @l29ah / 3658 дней назад
@l29ah Дык а что делать? hGetTextLine?
#0YCC7G/41E / @kb --> #0YCC7G/7KC / 3658 дней назад
@kb Использовать байтстринги или ещё какой текст. В твоих логах некорректный юникод проскакивает, поэтому ты сосёшь хуи, пытаясь разобрать его в буковки.
#0YCC7G/V9T / @l29ah --> #0YCC7G/41E / 3658 дней назад
@l29ah Такова stdlib у хаскеля. Мне бы в идеале получать линию Text'а, пропуская те, которые содержат ошибки энкодинга (но вообще я не понимаю откуда там ошибки энкодинга, их быть тоже не должно).
#0YCC7G/LX5 / @kb --> #0YCC7G/7KC / 3658 дней назад
@kb Спроси у своего источника.
#0YCC7G/G8L / @l29ah --> #0YCC7G/LX5 / 3658 дней назад
@l29ah У меня в syslog вот часто говнище летит от какого-нибудь там lighttpd.
#0YCC7G/0PX / @l29ah --> #0YCC7G/G8L / 3658 дней назад
@l29ah Эх, пошёл читать http://hackage.haskell.org/package/base-4.7.0.0/docs/System-IO.html по поводу юникодов, кажется у них таки есть какая-то поддержка кодировок.
#0YCC7G/02H / @kb --> #0YCC7G/V9T / 3658 дней назад
@kb Конечно, в идеале я бы сам сделал hGetBytestring и сконвертировал в текст, но такого не нашёл
#0YCC7G/39Z / @kb --> #0YCC7G/02H / 3658 дней назад
@kb А зачем тебе построчное чтение?
#0YCC7G/3GO / @l29ah --> #0YCC7G/39Z / 3658 дней назад
Ох, кароч нашёл, надо делать ``` mkTextEncoding "UTF-8//IGNORE" ```
#0YCC7G/QK8 / @kb / 3658 дней назад
@l29ah Ну, в сислог же построчно пишется. Не?
#0YCC7G/PTX / @kb --> #0YCC7G/3GO / 3658 дней назад
@kb И что? У тебя хаскель же, ебашишь hGetContents и не ебёшь мозги.
#0YCC7G/RQI / @l29ah --> #0YCC7G/PTX / 3658 дней назад
@l29ah Ну так он и упадёт если не задать кодировку.
#0YCC7G/ZZZ / @kb --> #0YCC7G/RQI / 3658 дней назад
@l29ah Байтстринговый не упадёт.
#0YCC7G/L03 / @l29ah --> #0YCC7G/RQI / 3658 дней назад
@l29ah Ну и по памяти я по строкам читаю, чтоб гарантировать линейность, собственно. У меня там через Pipes потом каждая строка процессится.
#0YCC7G/UO5 / @kb --> #0YCC7G/RQI / 3658 дней назад
@l29ah Так в том-то и дело что нету байтстрингового, о чём тред.
#0YCC7G/X1X / @kb --> #0YCC7G/L03 / 3658 дней назад
@kb Ты, возможно, хочешь pipes-bytestring или pipes-text подсосать, в таком случае.
#0YCC7G/FX6 / @l29ah --> #0YCC7G/UO5 / 3658 дней назад
> invalid byte sequence уау, UnicodeDecodeError
#0YCC7G/6TN / @238328 / 3658 дней назад
@kb Есть.
#0YCC7G/Y49 / @l29ah --> #0YCC7G/X1X / 3658 дней назад
@l29ah Где?
#0YCC7G/RL2 / @kb --> #0YCC7G/Y49 / 3658 дней назад
@kb О! pipes-bytestring использует Data.ByteString.hGetSome, спасибо!
#0YCC7G/F3D / @kb --> #0YCC7G/RL2 / 3658 дней назад
@l29ah вот ето
#0YCC7G/R2G / @238328 --> #0YCC7G/G8L / 3658 дней назад
@l29ah Они немного сложные и скорее подошли бы, если б я хотел "идеального парсинга", типа уметь процессить бесконечной длинны строки. Я в типах запутался, пока ещё не дорос короче.
#0YCC7G/71L / @kb --> #0YCC7G/FX6 / 3658 дней назад
@238328 оно
#0YCC7G/5I4 / @kb --> #0YCC7G/6TN / 3658 дней назад
чем только не маются люди, лишь бы не бинарные логи
#0YCC7G/NJH / @krkm / 3658 дней назад
@autism О, эксперты подтянулись.
#0YCC7G/20B / @kb --> #0YCC7G/NJH / 3658 дней назад
@polecat ЮНИКОД ПОРВАЛИ ЮНИКОД
#0YCC7G/UEB / @krkm --> #0YCC7G/UEX / 3658 дней назад
@polecat Проблема в том, что String, который как в питон2 какая-то дикая непонятная смесь строк и байтиков. Но теперь я знаю, что бывает Data.ByteString.hGetLine
#0YCC7G/UHI / @kb --> #0YCC7G/UEX / 3657 дней назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.