JSON解析表情符号Unicode崩溃我的反应本机项目

时间:2019-06-27 21:43:22

标签: javascript json react-native unicode expo

每当我尝试显示从我的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>组件中显示该字符串时,我的应用程序崩溃了。

任何指导将不胜感激。

3 个答案:

答案 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));
  });
}