2016-08-16 171 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"