cma*_*232 11 string unicode haskell utf-8
我是Haskell的新手,我正在尝试在我的app(Data.Digest.Pure.SHA
)中使用一个带有JSON库(AttoJSON
)的纯SHA1实现.
AttoJSON使用Data.ByteString.Char8
字节Data.ByteString.Lazy
串,SHA使用字节串,我的应用程序中的一些字符串文字是[Char]
.
Haskell Prime关于Char类型的维基页面似乎表明这仍然是在Haskell语言/ Prelude中得到解决的问题.
而我这篇文章的Unicode支持列出了一些图书馆,但它的一对夫妇岁.
目前在这些类型之间进行转换的最佳方法是什么,以及有哪些权衡?
谢谢!
这是我所拥有的,没有使用 ByteString 的内部函数。
import Data.ByteString as S (ByteString, unpack)
import Data.ByteString.Char8 as C8 (pack)
import Data.Char (chr)
strToBS :: String -> S.ByteString
strToBS = C8.pack
bsToStr :: S.ByteString -> String
bsToStr = map (chr . fromEnum) . S.unpack
Run Code Online (Sandbox Code Playgroud)
S.unpack
在 ByteString 上给我们 [Word8],我们应用(chr . fromEnum)
它将任何 Enum 类型转换为字符。通过将它们组合在一起,我们就得到了我们想要的功能!
Char8 和普通字节串是相同的东西,只是根据导入的模块具有不同的接口。主要是您想要在严格字节串和惰性字节串之间进行转换,为此您使用toChunks
和fromChunks
。
要将字符放入字节串中,请使用pack
.
另请注意,如果您的字符包含以 UTF-8 表示的多字节表示的代码点,则会出现问题。