如何从文件中读取字符串并转换为 Data.ByteString 以便在 Data.Serialize.decode 中使用

how to read String from file and convert to Data.ByteString for use in Data.Serialize.decode

我需要分析包含以下行的日志文件:

2018-07-11T17:25:14.07565;  [ZMQ] info; Sending message to; ROne (Addr {_unAddr = "tcp://127.0.0.1:10002"}); ## MSG ##; "\NUL\NUL\NUL\NUL\NUL\NUL\NUL\t127.0.0.1\NUL\NUL\NUL\NUL\NUL\NUL'\DC3\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NAKtcp://127.0.0.1:10003\NUL\NUL\NUL\NUL\NUL\NUL\NUL@h_493n\RS2o\tu|1\"7GvP472V*n606q\von080\nV7651A0\DC4\US8035L23\&04\1'\r9W{WD8\b33go41o\STXM4X5R84eN=43923f9\:A38C\DLE\b\NUL\NUL\NUL\NUL\NUL\NUL\NULG\SOH\NUL\NUL\NUL\NUL\NUL\NUL\NUL\t127.0.0.1\NUL\NUL\NUL\NUL\NUL\NUL'\DLE\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NAKtcp://127.0.0.1:10000\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL;42\NUL"

带有\NUL的部分是使用

编写的
Prelude.putStr (show msg)

其中 msg 是由 Data.Serialize

的实例创建的 Data.ByteString

我需要

  1. 阅读整个 String
  2. select ByteString 部分
  3. 把那个部分变成 ByteString
  4. 然后交给Data.Serialize.decode

我不清楚如何执行第 3 步:将 ByteStringString 表示转换为真实的 ByteString

我最初的尝试是将#2 给 Data.ByteString.Char8.pack。但是,当尝试 decode

decode (BSC8.pack l) :: Either String SignedRPC

我得到:

Left "too few bytes\nFrom:\tdemandInput\n\n"

也许:

Data.ByteString Text.Read> readMaybe "\"\NUL\"" :: Maybe ByteString
Just "\NUL"