我正在阅读包含UTF-8字符的HTML文档,但是当我访问文档的 innerHTML
时,所有“坏”字符都显示为{{1} }。我已经在所有主流浏览器中尝试过,它的行为方式相同。当我0xfffd
alert()
时,它会将这些字符显示为“带有?标记的钻石。
令人惊讶的是,以下工作完美,在警告框中正确显示UTF-8字符,因此它不是innerHTML
发生故障。
alert()
为什么我无法使用 alert("Doppelg\u00e4nger!");
访问UTF-8字符?或者是否有其他方法可以在JavaScript中访问它们。
答案 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的麻烦。