哪一种是将字符串转换为字节字符串的正确方法?



我找到了以下两个将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转换为二进制数据的"正确"方法取决于您想要的字符编码。

最新更新