提问人:Robin Rodricks 提问时间:5/8/2009 更新时间:5/8/2009 访问量:7792
使用 innerHTML 读取 UTF8 字符会返回所有字符的0xfffd
Reading UTF8 chars using innerHTML returns 0xfffd for all chars
问:
我正在阅读一个包含 UTF-8 字符的 HTML 文档,但是当我访问文档的 innerHTML
时,所有“坏”字符都显示为 .我已经在所有主要浏览器中尝试过它,它的行为方式相同。当我将这些字符显示为“带有 ?标记”。0xfffd
alert()
innerHTML
令人惊讶的是,以下内容工作得很好,在警报框中正确显示 UTF-8 字符,因此它没有出现故障。alert()
alert("Doppelg\u00e4nger!");
为什么我不能使用 innerHTML
访问 UTF-8 字符?或者有没有另一种方法可以在 JavaScript 中访问它们。
答:
0赞
Greg
5/8/2009
#1
页面是否使用 UTF-8 字符集发送? 从来没有给我带来任何UTF-8的麻烦。.innerHTML
评论
0赞
Robin Rodricks
5/8/2009
你如何调试它?我正在从框架内读取 innerHTML,如果这会导致任何麻烦。
0赞
Greg
5/8/2009
您可以查看标题或页面属性 - 您使用的是什么浏览器?
2赞
KooiInc
5/8/2009
#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änger 中的 Doppelgängerä例如,NGER。
评论
0赞
Robin Rodricks
5/8/2009
很酷。无论如何,我发现问题出在HTML页面本身。
评论