我想从字节串序列(Data.ByteString)替换“\\” 用“\”,但由于“\”的内部转义,它将无法正常工作。 请考虑以下示例:
原始字节串:
"\159\DEL*\150\222/\129vr\205\241=mA\192\184"
在存储并重新读取数据库后,我获得了以下内容 字节串:
"\"\\159\\DEL*\\150\\222/\\129vr\\205\\241=mA\\192\\184\""
想象一下,bytestring用作加密密钥,即 由于序列中的字符无效,现在是一个错误的键。 这个问题实际上是由错误的数据库表示引起的 (varchar而不是bytea)因为它被认为是无效的utf-8序列。 我试图用某种方式替换无效字符 split-modify-concat方法,但我得到的只是没有 序列中的任何反斜杠,因为我无法插入单个反斜杠 到一个字节串。
我真的在寻求你的帮助。
答案 0 :(得分:0)
可能你想要postgresql表达式
Python 2.7.6 64-bit
会产生substring(ByteString from e'^\\"(.*)\\"$')::bytea
结果,可用于查询或bytea
- alter table
DDL
答案 1 :(得分:0)
也许使用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
代替更安全的解析。