1

假设我有以下基本 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);
  });
});

我的问题是,为什么会这样?我知道我可以将它们转换为 HTML 实体并直接呈现正确的字符,而不是呈现 Unicode 代码点。这个问题更多是出于学习目的。

这是jsbin

4

2 回答 2

3

这是因为\u00f2Unicode 字符的 HTML 标记无效。正确的 HTML 标记是&#x00f2. 您需要做的就是替换\u&#x,您应该没问题。

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

简而言之,\u在 Javascript、&#xHTML 中使用,不要试图切换它,否则你会遇到问题(比如这里发生的事情)

于 2012-12-10T02:14:19.023 回答
3

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

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

在 HTML 文档中,通常推荐的现代方法是使用 UTF-8 编码直接输入字符。你也可以在 JavaScript 中做同样的事情,例如$("body").html("ò")},2000). 但是,由于指定字符编码的假设或实际复杂性,有时会避免这种情况。

于 2012-12-10T07:03:32.793 回答