2016-08-16 1 views
1

Обратите внимание, что этот вопрос такой же, как this.
Это то же самое, что и this PHP question, но я ищу эквивалент haskell.Как декодировать строку с закодированным словом?

RFC 2047 определяет стандарт «зашифровано-слово» кодировки и дает пример:

=?iso-8859-1?q?this=20is=20some=20text?= 

Есть ли стандартная библиотека Haskell для решения декодирования этого в него правильно Text представлении?

Это не должно быть слишком сложно для написания пользовательского парсера с использованием парсека и RFC Spec, но это похоже на общую проблему с решеткой на других языках, на которую я не могу найти эквивалент Haskell, и я бы предпочел не пересоздайте колесо здесь.

+0

взглянуть на [мим] пакет (https://hackage.haskell.org/package/mime) , – ErikR

+0

@ErikR Если есть что-то, что мне там не хватает, оно не обрабатывает этот тип кодирования. Codec.MIME.Decode явно указывает: «В настоящее время поддерживаются только два поддерживаемых кодировки base64 и quoted-printable». Таким образом, это превратило бы мой пример в «=? Iso-8859-1? Q? Это некоторый текст? =», А не «это какой-то текст». Это определенно работоспособно, но тогда вам нужно снять лишние символы. Также он оставляет только «_», что является допустимым представлением кодированного слова для «» – jkeuhlen

+1

. Посмотрите код для [decodeWord] (https://hackage.haskell.org/package/mime-0.4.0.2/docs/ SRC/кодек-MIME-Decode.html # decodeWord). Несмотря на отсутствие документов, похоже, что существует поддержка iso-8859-1. – ErikR

ответ

2

В mime пакете должны смотреть на decodeWord в модуле Codec.MIME.Decode:

ghci> import Codec.MIME.Decode 
ghci> decodeWord "=?iso-8859-1?q?this=20is=20some=20text?=" 
Just ("this is some text","") 

От чтения исходного кода как iso-8859-1 и us-ascii поддерживаются.

Существует также decodeWords, которая использует функцию decodeWord перевести всю строку:

ghci> decodeWords "Foo=?iso-8859-1?q?this=20is=20some=20text?=Bar" 
"Foothis is some textBar" 
Смежные вопросы