假设我有以下基本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实体并直接渲染正确的字符。问题更多是出于学习目的。
答案 0 :(得分:3)
这是因为在HTML中,\u00f2
只是一个包含五个字符的序列;反斜杠\
在HTML中从未有任何特殊含义。在JavaScript字符串中,\ u00f2具有特殊含义:它表示具有十六进制数字00f2的Unicode代码单元,即字符“ò”。
相反,尽管您可以在HTML中使用ò
来表示“ò”,但您无法在JavaScript中执行此操作,但您可以使用转换ò
的函数(这只是八个字符的序列)从JavaScript的角度来看)到“ò”。此外,如果您的JavaScript代码在script
元素或事件属性中显示为嵌入在HTML中,那么根据某些规则,浏览器可能会在调用JavaScript解释器之前首先按HTML规则解释ò
。
在HTML文档中,现代的,通常推荐的方法是使用UTF-8编码直接输入字符。您也可以在JavaScript中执行相同操作,例如: $("body").html("ò")},2000)
。但是,由于在指定character encoding时出现假设或真正的复杂情况,有时可以避免这种情况。
答案 1 :(得分:2)
这是因为\u00f2
对于unicode字符不是有效的HTML标记。正确的HTML标记为ò
。您需要做的就是将\u
替换为&#x
,您应该没问题。
如果你想知道为什么jQuery使用\u
,那是因为javascript使用\u
指定unicode字符。您可以在此处阅读更多内容:jquery .text() and unicode。
简而言之,在Javascript中使用\u
,在HTML中使用&#x
,并且不要尝试切换它,否则会遇到问题(例如此处发生的事情)