从 UTF-16 字符串获取意外的 EOF

Getting Unexpected EOF from a UTF-16 string

我正在使用 LZstring to do a UTF-16 compression on a string and storing it in a database. Specifically, it was a JSON.stringify'd data stored in a cordova.sqllite 数据库。当我从数据库中检索数据时,有时会导致 SyntaxError: Unexpected EOF

我认为根据输入,LZString 的 compressToUTF16 函数会产生无效字符。奇怪的是,它正确地存储在数据库中(存储到数据库时没有意外的 EOF 错误)。

存储普通字符串或 compressToBase64 字符串不会导致错误,因此我认为这不是数据库的问题。

很明显,LZString 的 UTF16 压缩有时会生成 \u2028\u2029 字符,这些字符被解析器视为换行符(有关详细信息,请参阅 here)。我在压缩之后和存储之前以及检索之后和​​解压缩之前替换了所有出现的两个 unicode 以解决问题。

入库前

var dbvalue = LZString.compressToUTF16(JSON.stringify(value));
dbvalue = dbvalue.replace(/\u2028/g, '\u32800').replace(/\u2029/g, '\u32801');

检索后

var utfdata = dbvalue.replace(/\u32800/g,'\u2028').replace(/\u32801/g,'\u2029');
var value = JSON.parse(LZString.decompressFromUTF16(utfdata));

已编辑
替换字符没有被LZString使用,占用较少space。有关详细信息,请参阅 here