Unicode点在浏览器中呈现差异:HTML字符与jQuery.html

时间:2012-12-10 01:58:29

标签: jquery html browser unicode

假设我有以下基本HTML页面

<html>
  <head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>    
    <meta charset=utf-8 />
    <title>JS Bin</title>
  </head>
  <body>
    \u00f2
  </body>
</html>

当页面呈现时,我看到的是\ u00f2而我正在期待ò。并且出现了很大的“但是”。使用以下Javascript代码,我看到的是ò字符(2秒后)。

$(function(){
  window.setTimeout(function(){
    $("body").html("\u00f2")},2000);
  });
});

我的问题是,为什么会发生这种情况?我知道不是渲染Unicode代码点,而是将它们转换为HTML实体并直接渲染正确的字符。问题更多是出于学习目的。

这是the jsbin

2 个答案:

答案 0 :(得分:3)

这是因为在HTML中,\u00f2只是一个包含五个字符的序列;反斜杠\在HTML中从未有任何特殊含义。在JavaScript字符串中,\ u00f2具有特殊含义:它表示具有十六进制数字00f2的Unicode代码单元,即字符“ò”。

相反,尽管您可以在HTML中使用&#x00f2;来表示“ò”,但您无法在JavaScript中执行此操作,但您可以使用转换&#x00f2;的函数(这只是八个字符的序列)从JavaScript的角度来看)到“ò”。此外,如果您的JavaScript代码在script元素或事件属性中显示为嵌入在HTML中,那么根据某些规则,浏览器可能会在调用JavaScript解释器之前首先按HTML规则解释&#x00f2;

在HTML文档中,现代的,通常推荐的方法是使用UTF-8编码直接输入字符。您也可以在JavaScript中执行相同操作,例如: $("body").html("ò")},2000)。但是,由于在指定character encoding时出现假设或真正的复杂情况,有时可以避免这种情况。

答案 1 :(得分:2)

这是因为\u00f2对于unicode字符不是有效的HTML标记。正确的HTML标记为&#x00f2。您需要做的就是将\u替换为&#x,您应该没问题。

如果你想知道为什么jQuery使用\u,那是因为javascript使用\u指定unicode字符。您可以在此处阅读更多内容:jquery .text() and unicode

简而言之,在Javascript中使用\u,在HTML中使用&#x,并且不要尝试切换它,否则会遇到问题(例如此处发生的事情)