使用innerHTML读取UTF8字符会为所有字符返回0xfffd

时间:2009-05-07 16:48:29

标签: javascript html utf-8

我正在阅读包含UTF-8字符的HTML文档,但是当我访问文档的 innerHTML 时,所有“坏”字符都显示为{{1} }。我已经在所有主流浏览器中尝试过,它的行为方式相同。当我0xfffd alert()时,它会将这些字符显示为“带有?标记的钻石

令人惊讶的是,以下工作完美,在警告框中正确显示UTF-8字符,因此它不是innerHTML发生故障。

alert()

为什么我无法使用 alert("Doppelg\u00e4nger!"); 访问UTF-8字符?或者是否有其他方法可以在JavaScript中访问它们。

2 个答案:

答案 0 :(得分:2)

首先,检查文档标题是否包含。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

您还可以使用javascript:

读出元标记
var metaTags = document.getElementsByTagName("META");

如果是,那就是行为的解释。您可以尝试将utf-8更改为ISO-8859-1:

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

最好是在HTML中对htmlEncode中的所有扩展字符进行编码。像这样:

function encodeHTML(str){
 var aStr = str.split(''),
     i = aStr.length,
     aRet = [];

   while (--i) {
    var iC = aStr[i].charCodeAt();
    if (iC < 65 || iC > 127 || (iC>90 && iC<97)) {
      aRet.push('&#'+iC+';');
    } else {
      aRet.push(aStr[i]);
    }
  }
 return aRet.reverse().join('');
}

请注意,此功能将编码不是[a-zA-Z]的所有内容。这个函数将编码Doppelg&amp;#228; nger中的Doppelgänger。

答案 1 :(得分:0)

是否使用UTF-8字符集发送了该页面? .innerHTML从来没有给我任何UTF-8的麻烦。