如何将utf-16表情符号替代对解码为uf8-8,并在html中正确显示?

时间:2018-10-09 21:46:58

标签: javascript xml string utf-8 utf-16

我有一个字符串,其中包含 xml 。它具有以下 substring

<Subject>&amp;#55357;&amp;#56898;&amp;#55357;&amp;#56838;&amp;#55357;&amp;#56846;&amp;#55357;&amp;#56838;&amp;#55357;&amp;#56843;&amp;#55357;&amp;#56838;&amp;#55357;&amp;#56843;&amp;#55357;&amp;#56832;&amp;#55357;&amp;#56846;</subject>    

我正在从服务器中提取 xml ,我需要将其显示给用户。我注意到“&”号已被转义,并且有utf-16代理对。如何确保表情符号/表情符号在浏览器中正确显示。

目前,我只得到以下字符:��������������而不是实际的表情符号。

我正在寻找一种简单的方法来解决此问题,而无需任何外部库或任何第三方代码(如果可能的话)只是普通的旧javascript,html或css。

1 个答案:

答案 0 :(得分:0)

您可以使用String.fromCharCode将包括代理在内的UTF-16代码单元转换为JavaScript字符串。以下代码段应为您提供一个思路。

var str = '&amp;#55357;&amp;#56898;ABC&amp;#55357;&amp;#56838;&amp;#55357;&amp;#56846;&amp;#55357;&amp;#56838;&amp;#55357;&amp;#56843;&amp;#55357;&amp;#56838;&amp;#55357;&amp;#56843;&amp;#55357;&amp;#56832;&amp;#55357;&amp;#56846;';

// Regex matching either a surrogate or a character.
var re = /&amp;#(\d+);|([^&])/g;
var match;
var charCodes = [];

// Find successive matches
while (match = re.exec(str)) {
  if (match[1] != null) {
    // Surrogate
    charCodes.push(match[1]);
  }
  else {
    // Unescaped character (assuming the code point is below 0x10000),
    charCodes.push(match[2].charCodeAt(0));
  }
}

// Create string from UTF-16 code units.
var result = String.fromCharCode.apply(null, charCodes);
console.log(result);