gpt4 book ai didi

string - 将 String 转换为 ByteString 的最佳方法是什么

转载 作者:行者123 更新时间:2023-12-02 01:27:41 24 4
gpt4 key购买 nike

在 Haskell 中将字符串转换为 ByteString 的最佳方法是什么?

我对这个问题的直觉 react 是

import qualified Data.ByteString as B
import Data.Char (ord)

packStr = B.pack . map (fromIntegral . ord)

但这似乎并不令人满意。

最佳答案

这是我的 Haskell String/Text/ByteString 严格/惰性转换的备忘单,假设所需的编码是 UTF-8。 Data.Text.Encoding 库还有其他可用的编码。

请确保写入(使用OverloadedStrings):

lazyByteString :: BL.ByteString
lazyByteString = "lazyByteString ä ß" -- BAD!

这将以意想不到的方式进行编码。尝试一下

lazyByteString = BLU.fromString "lazyByteString ä ß" -- good

相反。

“文本”类型的字符串文字在编码方面工作良好。

备忘单:

import Data.ByteString.Lazy as BL
import Data.ByteString as BS
import Data.Text as TS
import Data.Text.Lazy as TL
import Data.ByteString.Lazy.UTF8 as BLU -- from utf8-string
import Data.ByteString.UTF8 as BSU -- from utf8-string
import Data.Text.Encoding as TSE
import Data.Text.Lazy.Encoding as TLE

-- String <-> ByteString

BLU.toString :: BL.ByteString -> String
BLU.fromString :: String -> BL.ByteString
BSU.toString :: BS.ByteString -> String
BSU.fromString :: String -> BS.ByteString

-- String <-> Text

TL.unpack :: TL.Text -> String
TL.pack :: String -> TL.Text
TS.unpack :: TS.Text -> String
TS.pack :: String -> TS.Text

-- ByteString <-> Text

TLE.encodeUtf8 :: TL.Text -> BL.ByteString
TLE.decodeUtf8 :: BL.ByteString -> TL.Text
TSE.encodeUtf8 :: TS.Text -> BS.ByteString
TSE.decodeUtf8 :: BS.ByteString -> TS.Text

-- Lazy <-> Strict

BL.fromStrict :: BS.ByteString -> BL.ByteString
BL.toStrict :: BL.ByteString -> BS.ByteString
TL.fromStrict :: TS.Text -> TL.Text
TL.toStrict :: TL.Text -> TS.Text

请+1 Peaker 的答案,因为他正确地处理了编码。

关于string - 将 String 转换为 ByteString 的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3232074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com