2009-05-07 81 views
0

我读包含UTF8字符的HTML文档,但是当我访问该文档的innerHTML,所有的“坏”的字符显示为0xfffd。我已经在所有主流浏览器中尝试过了,它的行为方式也是一样的。当我alert()innerHTML它显示那些字符作为“钻石与?标记”阅读UTF8字符使用的innerHTML返回0xfffd所有字符

令人惊讶的是,以下工作完美地正确显示警告框中的UTF-8字符,所以它不是alert()有故障。

alert("Doppelg\u00e4nger!"); 

我为什么不能访问使用innerHTML的UTF-8字符?或者有另一种方法可以在JavaScript中访问它们。

回答

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"> 

更好的是所有的HTMLEncode扩展字符在你的HTML。像这样:

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 &#228;例如nger。

+0

很酷。无论如何,我发现问题是与HTML页面本身。 – 2009-05-07 19:03:49

0

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

+0

只是你如何调试它?如果这会导致任何问题,我正在阅读框架内的innerHTML。 – 2009-05-07 17:28:35

+0

您可以查看标题或页面属性 - 您使用的是哪种浏览器? – Greg 2009-05-07 17:34:55