2012-12-10 35 views
0

比方說,我有以下基本的HTML頁面的Unicode點呈現在瀏覽器的區別:HTML字符VS jQuery.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個字符(2秒後)。

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

我的問題是,爲什麼會發生這種情況?我知道而不是渲染Unicode碼點,我可以將它們轉換爲HTML實體並直接呈現正確的字符。這個問題更多的是爲了學習的目的。

這裏是the jsbin

回答

3

這是因爲在HTML中, \u00f2只是一個由五個字符組成的序列;反斜槓\在HTML中從來沒有任何特殊含義。在JavaScript字符串中,\ u00f2具有特殊含義:它表示具有十六進制數字00f2的Unicode代碼單元,即字符「ò」。相反,雖然HTML中使用&#x00f2;表示「ò」,但您無法在JavaScript中使用該功能,儘管您可以使用轉換&#x00f2;的功能(從JavaScript角度來看,它只是一個由8個字符組成的序列)到「ò」。此外,如果您的JavaScript代碼在HTML中嵌入在script元素或事件屬性中,則瀏覽器可能會根據特定規則在調用JavaScript解釋器之前首先按HTML規則解釋&#x00f2;

在HTML文檔中,現代的一般推薦方法是使用UTF-8編碼直接輸入字符。您也可以在JavaScript中執行相同的操作,例如$("body").html("ò")},2000)。但是,由於在指定character encoding時出現假設或真正的併發症,有時可以避免這種情況。

2

這是因爲\u00f2不是Unicode字符有效的HTML標記。正確的HTML標記是&#x00f2。所有你需要做的是用&#x替換\u,你應該沒問題。

如果你想知道爲什麼jQuery使用\u,這是因爲javascript使用\u指定unicode字符。你可以在這裏閱讀更多:jquery .text() and unicode

總之,在JavaScript中使用\u&#x在HTML,而不要試圖圍繞切換或者你會碰到的問題(如這裏發生了什麼)

+0

UTF-16和UTF-32是Unicode的兩種傳輸編碼,不應與JavaScript只支持BMP的問題混淆。 –

+0

已更新答案以刪除對UTF-16的引用 – cegfault