如何解码一个编码字符串?

3
请注意,此问题与此前未回答的问题this相同。
这也与此PHP问题相同,但我正在寻找Haskell等效物。 RFC 2047定义了“编码单词”编码的标准,并提供了一个示例:
=?iso-8859-1?q?this=20is=20some=20text?=

是否有一个标准的Haskell库来处理将其解码为正确的表示形式?

使用parsec和RFC规范编写自定义解析器不应该太难,但这似乎是其他语言中已经解决的常见问题,在Haskell中找不到等效物,我宁愿不要在这里重新发明轮子。


请查看mime包。 - ErikR
@ErikR 除非我漏了什么,它不能处理这种类型的编码。Codec.MIME.Decode明确指出:“目前只支持base64和quoted-printable两种编码。”所以它会将我的示例转换为“=?iso-8859-1?q?this is some text?=”,而不是“this is some text”。这肯定可行,但你还需要去除额外的字符。此外,它会保留“_”,它是表示空格的有效编码字符。 - jkeuhlen
1
看一下 decodeWord 的代码。尽管缺乏文档,但似乎支持 iso-8859-1。 - ErikR
@ErikR 哦,太好了,这正是我所需要的,谢谢!如果您想写一个简短的答案,我很乐意接受。 - jkeuhlen
1个回答

3
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

还有decodeWords,它使用decodeWord函数将整个字符串进行翻译:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接