将一个字符串的UTF-8编码存储在一个字节串中

8

我希望能够访问字符串的UTF-8编码中的单个字节。

我尝试使用Data.ByteString.Char8.pack,但这似乎只截断了每个字符的最后一个字节:

ghci> Char8.pack "\945\946\947" 
"\177\178\179"

如果我可以从文件中读取字符串,那么这不是一个问题:

ghci> Prelude.writeFile "temp.txt" "\945\946\947" >> Char8.readFile "temp.txt"
"\206\177\206\178\206\179"

但我希望有一种纯粹的方法将String -> ByteString进行转换,而不会截断,并且Hoogle并没有提供很大的帮助。


2
我记得读到过有关Hayoo在其搜索中包含比Hoogle更多的软件包的内容,所以我在那里尝试了你的搜索,它给了我正确的答案作为第二个结果: - Boris
1个回答

13
您可以使用 Data.ByteString.UTF8.fromString 函数:
ghci> import Data.ByteString.UTF8 as BSUTF8
ghci> :t BSUTF8.fromString
BSUTF8.fromString :: String -> ByteString
ghci> BSUTF8.fromString "\945\946\947"
"\206\177\206\178\206\179"

另外,您可以使用encode{Strict,Lazy}ByteString来自encoding包,该包提供了比仅UTF-8更多的编码:

ghci> import Data.Encoding as E
ghci> import Data.Encoding.UTF8
ghci> E.encodeStrictByteString UTF8 "\945\946\947"
"\206\177\206\178\206\179"

编码包非常好!但愿它没有那么多高级依赖。 - Nate Symer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接