我找到了以下两个将String
转换为ByteString
的函数,哪一个是正确的方法?有什么区别?
Data.ByteString.Char8.pack
Data.ByteString.UTF8.fromString
我通常使用text
的encodeUtf8。
我认为您链接的utf8-string
函数也可以正确处理所有 Unicode。 我不熟悉包装,我只是快速浏览了一下。
Data.ByteString.Char8.pack
明确不处理 255 以上的 Unicode 代码点,因此只有当您知道String
仅限于该范围时,它才是正确的。
Data.ByteString.Char8.pack
将破坏任何非ASCII字符。该模块中的所有函数都假定"字符"正好是 8 位。这对于普通的ASCII来说效果很好,但对于其他有效的Unicode字符来说却很糟糕。通常,您可能应该避免使用整个模块。
实际上,ByteString
用于二进制数据。(即,如果要从文件中读取数据,请保持不变。如果要处理文本,则可能应该使用text
包,而不是ByteString
本身。然后,text
包具有使用不同字符编码(通常为 UTF8(对ByteString
数据进行编码或解码的功能。
总之,将 UnicodeString
转换为二进制数据的"正确"方法取决于您想要的字符编码。