在Latin1编码的Data.ByteString和Data.Text之间转换

时间:2011-09-25 10:23:53

标签: haskell character-encoding latin1

由于latin-1(又名ISO-8859-1)字符集嵌入Unicode字符集中作为其最低的256个代码点,我希望转换是微不足道的,但我没有看到任何Data.Text.Encoding中的latin-1编码转换函数,仅包含常见UTF编码的转换函数。

在latin-1表示法和Data.ByteString值中编码的Data.Text值之间进行转换的推荐和/或有效方法是什么?

1 个答案:

答案 0 :(得分:13)

答案就在您链接的页面顶部:

  

要访问更大的编码系列,请使用text-icu包:http://hackage.haskell.org/package/text-icu

快速GHCi示例:

λ> import Data.Text.ICU.Convert
λ> conv <- open "ISO-8859-1" Nothing
λ> Data.Text.IO.putStrLn $ toUnicode conv $ Data.ByteString.pack [198, 216, 197]
ÆØÅ
λ> Data.ByteString.unpack $ fromUnicode conv $ Data.Text.pack "ÆØÅ"
[198,216,197]

但是,正如您所指出的,在latin-1的特定情况下,代码点与Unicode重合,因此您可以使用pack中的unpack / Data.ByteString.Char8来执行从latin-1到/ String的平凡映射,然后您可以使用Text中相应的pack / unpack转换为Data.Text