每当我尝试显示从我的API端点在我的React Native项目中获取的一些数据时,都会收到此JSON解析错误:JSON parse error on line 0 near .."}], [18933, "RC': expected another Unicode escape for the second half of surrogate pair
很明显,Unicode转义符号缺少转义符。
我的字符串是 “您可以尝试,但我不这么认为??”
我尝试在控制台中打印该字符串,并且该字符串显示正常,但是当我尝试在React Native的<Text></Text>
组件中显示该字符串时,我的应用程序崩溃了。
任何指导将不胜感激。
答案 0 :(得分:1)
免责声明:这更多的是猜测,因为我只有您的错误和?表情符号可以使用。
“面对欢乐的脸”的Unicode字符是(U+1F602
),代理对是\uD83D\uDE02
。
如果您在文本组件中输入\uD83D\uDE02
并可以使用,则可以使用
function findSurrogatePair(point) {
// assumes point > 0xffff
var offset = point - 0x10000,
lead = 0xd800 + (offset >> 10),
trail = 0xdc00 + (offset & 0x3ff);
return [lead.toString(16), trail.toString(16)];
}
// find pair for U+1F602
findSurrogatePair(0x1f602); // ["d83d", "de02"]
参考+功劳:http://crocodillon.com/blog/parsing-emoji-unicode-in-javascript
免责声明:这更多的是猜测,因为我只有您的错误和?emoji表情可以使用。
希望这会有所帮助!
答案 1 :(得分:1)
UPDATE
我发现问题出在JavaScript String.substring()
方法上。它不知道如何正确拆分unicode代理对,因此如果您对定位不满意,则会尝试在一对中间拆分字符串。
我通过使用一个名为“ runes”的库解决了这个问题,该库可以正确拆分并采用具有unicode代理对的字符串的子字符串。
问题:
postComment.substring(0, 35)
解决方案:runes.substr(postComment, 0, 35)
只需安装runes
库并使用runes.substr(yourString, start, end)
处理字符串中的unicode代理对:)
答案 2 :(得分:1)
如果您的表情符号Unicode像\uD83D\uDE02
格式,则此javascript函数会将Unicode转换为表情符号
var unicodeToChar = function(text) {
return text.replace(/\\u[\dA-F]{4}/gi, function(match) {
return String.fromCharCode(parseInt(match.replace(/\\u/g, ''), 16));
});
}