2016-08-16 173 views
1

请注意,此问题与以前未答复的this相同。
它也和this PHP question一样,但我正在寻找相当于haskell的东西。如何解码编码字符串?

RFC 2047定义了“编码字”的编码标准,并提供了一个例子:

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

是否有处理解码成它这个标准Haskell的库的正确Text代表性?

这不应该太难使用parsec和RFC Spec编写自定义分析器,但这似乎是其他语言中常见的解决问题,我无法找到相当于Haskell的等价物,而且我宁愿不在这里重新发明车轮。

+0

看一看的[MIME](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包具有模块Codec.MIME.Decode在看decodeWord

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

通过阅读源代码既iso-8859-1us-ascii都支持。

还有它使用decodeWord功能翻译一个整个字符串的decodeWords

ghci> decodeWords "Foo=?iso-8859-1?q?this=20is=20some=20text?=Bar" 
"Foothis is some textBar"