从 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
我正在使用 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