在haskell中使用单反斜杠替换双反斜杠

时间:2016-06-11 12:01:38

标签: postgresql haskell escaping bytestring

我想从字节串序列(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方法,但我得到的只是没有 序列中的任何反斜杠,因为我无法插入单个反斜杠 到一个字节串。

我真的在寻求你的帮助。

2 个答案:

答案 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代替更安全的解析。