我正在使用LZstring对字符串执行UTF-16压缩并将其存储在数据库中。具体来说,它是存储在cordova.sqllite db中的JSON.stringify
d数据。当我从db检索数据时,有时会导致 SyntaxError:Unexpected EOF
我认为根据输入,LZString的compressToUTF16
函数会产生无效字符。奇怪的是,它被正确地存储在DB中(存储到DB中时没有意外的EOF错误)。
存储普通字符串或compressToBase64
'字符串不会导致错误,因此我认为这不是DB的问题。
答案 0 :(得分:0)
显然,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));
<强> EDITED 强>
LZString不使用替换字符,占用的空间更少。有关详细信息,请参阅here