在 haskell 中用单反斜杠替换双反斜杠
replace double backslash with single backslash in haskell
我想从字节串序列中替换“\\”(Data.ByteString)
用“\”,但由于“\”的内部转义,它不会起作用。
考虑以下示例:
原始字节串:
"9\DEL*02/9vr51=mA24"
存储在数据库中并从中重新读取后,我得到以下信息
字节串:
"\"\159\DEL*\150\222/\129vr\205\241=mA\192\184\""
假设字节串被用作加密密钥,这
由于序列中的无效字符,现在是一个错误的键。
这个问题实际上是由错误的数据库表示引起的
(varchar 而不是 bytea),因为否则它会被视为无效的 utf-8 序列。
我尝试使用某种方式替换无效字符
split-modify-concat 方法,但我得到的只是没有
序列中的任何反斜杠,因为我无法插入单个反斜杠
成字节串。
真心求助
可能您需要 postgresql 表达式
substring(ByteString from e'^\"(.*)\"$')::bytea
这将给出可用于查询或 alter table
-using
DDL
的 bytea
结果
也许使用 read
对你有用:
import Data.ByteString.Char8 as BS
bad = BS.pack "\"\159\DEL*\150\222/\129vr\205\241=mA\192\184\""
good = read (BS.unpack bad) :: BS.ByteString
-- returns: "9\DEL*02/9vr51=mA24"
您也可以使用 readMaybe
来进行更安全的解析。
我想从字节串序列中替换“\\”(Data.ByteString) 用“\”,但由于“\”的内部转义,它不会起作用。 考虑以下示例:
原始字节串:
"9\DEL*02/9vr51=mA24"
存储在数据库中并从中重新读取后,我得到以下信息 字节串:
"\"\159\DEL*\150\222/\129vr\205\241=mA\192\184\""
假设字节串被用作加密密钥,这 由于序列中的无效字符,现在是一个错误的键。 这个问题实际上是由错误的数据库表示引起的 (varchar 而不是 bytea),因为否则它会被视为无效的 utf-8 序列。 我尝试使用某种方式替换无效字符 split-modify-concat 方法,但我得到的只是没有 序列中的任何反斜杠,因为我无法插入单个反斜杠 成字节串。
真心求助
可能您需要 postgresql 表达式
substring(ByteString from e'^\"(.*)\"$')::bytea
这将给出可用于查询或 alter table
-using
DDL
bytea
结果
也许使用 read
对你有用:
import Data.ByteString.Char8 as BS
bad = BS.pack "\"\159\DEL*\150\222/\129vr\205\241=mA\192\184\""
good = read (BS.unpack bad) :: BS.ByteString
-- returns: "9\DEL*02/9vr51=mA24"
您也可以使用 readMaybe
来进行更安全的解析。