我发现以下两个将String
转换为ByteString
的函数,正确的方法是哪一个?和有什么区别?
答案 0 :(得分:5)
我通常使用text
中的encodeUtf8。
我认为您链接的utf8-string
函数也将正确处理所有Unicode。我对包装不熟悉,只是快速浏览了一下。
Data.ByteString.Char8.pack
显然不处理255以上的Unicode代码点,因此只有在您知道String
限于该范围的情况下,它才是正确的。
答案 1 :(得分:4)
Data.ByteString.Char8.pack
将修饰所有非ASCII字符。该模块中的所有 功能均假定“字符”恰好是8位。对于普通ASCII来说,这很好用,但是对于其他有效的Unicode字符,则无法正常工作。通常,您应该只避免使用整个模块。
确实,ByteString
适用于 binary 数据。 (即,如果您想从文件中读取数据,而保持不变。)如果要处理 text ,则可能应该使用text
包,而不是{{1 }}本身。然后,ByteString
包具有使用不同的字符编码(通常为UTF8)对text
数据进行编码或解码的功能。
总而言之,将Unicode ByteString
转换为二进制数据的“正确”方法取决于所需的字符编码。