如何将Data.Text.Internal.Text转换为Data.ByteString.Lazy.ByteString?
Haskell Text 转惰性 ByteString 实现方案
首先明确:Data.Text.Internal.Text 是 text 包的内部导出类型,和对外暴露的 Data.Text.Text 完全等价,直接按普通 Text 类型处理即可。
文本转字节序列必须指定字符编码,以下是最常用的UTF-8编码转换方案:
- 首先确保你的项目依赖了
text和bytestring两个核心包 - 导入所需模块:
import qualified Data.Text as T import qualified Data.Text.Encoding as TE import qualified Data.ByteString.Lazy as BL
- 转换逻辑直接组合现有函数即可:
textToLazyBS :: T.Text -> BL.ByteString textToLazyBS = BL.fromStrict . TE.encodeUtf8
如果需要使用其他编码(比如UTF-16、GBK等),替换编码函数即可:
- 若使用UTF-16LE编码,将
TE.encodeUtf8替换为TE.encodeUtf16LE - 若使用GBK等非Unicode编码,需要引入
text-encoding依赖,使用对应编码的编码函数后,同样调用BL.fromStrict转成惰性ByteString即可。
示例调用:
main :: IO () main = do let srcText = T.pack "测试文本 123" lazyBS = textToLazyBS srcText BL.putStrLn lazyBS
注意:不要使用无编码的unsafe转换函数,否则会出现不可预期的乱码问题。
内容的提问来源于stack exchange,提问作者Chris Stryczynski
相关产品推荐
相关产品推荐

