【问题标题】:How can I decode an encoded-word String?如何解码编码字字符串?
【发布时间】:2016-08-16 21:48:06
【问题描述】:

请注意,此问题与 this 之前未回答的问题相同。
它也与this PHP question 相同,但我正在寻找等效的haskell。

RFC 2047 定义了“编码字”编码的标准,并提供了以下示例:

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

是否有一个标准的 haskell 库用于将其解码为正确的Text 表示?

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

【问题讨论】:

  • 看看mime 包。
  • @ErikR 除非我在那里缺少某些东西,否则它不会处理这种类型的编码。 Codec.MIME.Decode 明确指出“目前,base64 和quoted-printable 是唯一支持的两种编码。”。所以它会把我的例子变成“=?iso-8859-1?q?this is some text?=”而不是“this is some text”。这绝对是可行的,但是你必须去掉多余的字符。它还单独留下“_”,这是“”的有效编码字表示
  • 查看decodeWord 的代码。尽管缺少文档,但似乎支持 iso-8859-1。
  • @ErikR 哦,太好了,这正是我所需要的,谢谢!如果你想写一个简短的答案,我很乐意接受。

标签: haskell


【解决方案1】:

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-1us-ascii 均受支持。

还有decodeWords 使用decodeWord 函数来翻译整个字符串:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2011-10-31
    • 2012-07-05
    • 1970-01-01
    • 2014-12-31
    相关资源
    最近更新 更多