由于 latin-1(又名 ISO-8859-1)字符集作为其最低的 256 个代码点嵌入在 Unicode 字符集中,我希望转换很简单,但我没有看到任何 latin-1 encoding 转换函数,Data.Text.Encoding
其中仅包含常见 UTF 编码的转换函数。
Data.ByteString
在以 latin-1 表示形式编码的值和值之间进行转换的推荐和/或有效方法是Data.Text
什么?
由于 latin-1(又名 ISO-8859-1)字符集作为其最低的 256 个代码点嵌入在 Unicode 字符集中,我希望转换很简单,但我没有看到任何 latin-1 encoding 转换函数,Data.Text.Encoding
其中仅包含常见 UTF 编码的转换函数。
Data.ByteString
在以 latin-1 表示形式编码的值和值之间进行转换的推荐和/或有效方法是Data.Text
什么?
答案就在您链接的页面顶部:
要访问更大的编码系列,请使用
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
fromData.ByteString.Char8
执行从 latin-1 from/to 的简单映射String
,然后您可以Text
使用对应pack
/unpack
来自Data.Text
。