【发布时间】:2022-06-12 13:21:16
【问题描述】:
我有一个 Sqlite 数据库,它在某些字符串中获得了 NUL 字节。我想用 '\0' 替换那个 NUL 字节,以便我知道该字符串包含一个 NUL 字节,并且 NUL 字节后面的所有内容都是可见的。 这是我从工作中继承的数据库。我没有把这件事弄得一团糟,我只需要处理它。
我尝试了类似的方法:
iif(instr(Message, char(0)) = 0
, Message
, substr(Message, 1, instr(Message, char(0)))
|| "\0"
|| substr(Message, instr(Message, char(0))-length(Message)+1)
)
但似乎我实际上无法访问 NUL 之外的字符串。
看起来 substr 和 length 会将字符串视为 NUL 终止,并且不会转到实际字符串的末尾。我可以通过使用LENGTH(CAST(Message AS BLOB)) 获得实际字符串的长度(以字节为单位)(这很好,因为我们在 UTF8 中只使用了 7 位字符),但这不涉及substr,它不会过去NUL(向前(+ve 起始位置)或向后(-ve 起始位置))。
有没有办法解决这个问题?
顺便说一句,我知道 NUL 可以被剥离,但这会删除 NUL 之后的所有内容。可以在here 找到该信息。我就是从那里得到上述想法的。
我也试过了:
replace(Message, char(0), "\0")
这也没用。
【问题讨论】: