我想将字节串序列(Data.ByteString)中的"\“替换为"\",但由于"\”的内部转义,它将无法工作。考虑以下例子:
原始字节串:
"\159\DEL*\150\222/\129vr\205\241=mA\192\184"在存储数据库并从数据库中重新读取之后,我获得以下字节串:
"\"\\159\\DEL*\\150\\222/\\129vr\\205\\241=mA\\192\\184\""假设字节串被用作加密密钥,由于序列中的字符无效,该密钥现在是错误的。这个问题实际上是由错误的数据库表示(varchar而不是bytea)引起的,因为它被认为是无效的utf-8序列。我尝试用某种拆分-修改-连接的方法来替换无效字符,但是我得到的只是序列中没有任何反斜杠的东西,因为我不能在字节串中插入一个反斜杠。
我真的请求你的帮助。
发布于 2016-06-11 13:57:32
也许使用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: "\159\DEL*\150\222/\129vr\205\241=mA\192\184"您也可以使用readMaybe来进行更安全的解析。
发布于 2016-06-11 13:05:36
可能需要postgresql表达式
substring(ByteString from e'^\\"(.*)\\"$')::bytea,这将提供一个bytea结果,该结果可用于查询或alter table-using DDL。
https://stackoverflow.com/questions/37763466
复制相似问题