由于latin-1(又名ISO-8859-1)字符集嵌入Unicode字符集中作为其最低的256个代码点,我希望转换是微不足道的,但我没有看到任何Data.Text.Encoding
中的latin-1编码转换函数,仅包含常见UTF编码的转换函数。
在latin-1表示法和Data.ByteString
值中编码的Data.Text
值之间进行转换的推荐和/或有效方法是什么?
答案 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
。