2011-10-14 44 views
11

我的印象是,JavaScript解釋器認爲它解釋的源代碼已經正常化了。什麼,正常化?它不能是文本編輯器,否則源的純文本表示會改變。有沒有一些「預處理器」,做歸一化?JavaScript Unicode正常化

+1

瀏覽器引擎,我相信就是處理它。這就是爲什麼你瀏覽器之間的差異,他們做什麼和不支持。 – Ryan

回答

13

沒有,會自動使用上,甚至可以到JavaScript按照ECMAScript的5.所有字符保持不變,因爲原來的代碼點,有可能在非範式沒有Unicode規範化功能。

如嘗試:

<script type="text/javascript"> 
    var a= 'café';   // caf\u00E9 
    var b= 'café';   // cafe\u0301 
    alert(a+' '+a.length); // café 4 
    alert(b+' '+b.length); // café 5 
    alert(a==b);   // false 
</script> 

更新:ECMAScript 6 will introduce Unicode normalization for JavaScript strings.

+1

應該指出的是,JavaScript * PREDATES * UTF-16並且實際暴露了UCS-2。 (什麼內部使用可能會或可能不會是UTF-16,但它踢UCS-2出)。 –

13

的ECMAScript 6引入String.prototype.normalize()這需要照顧的Unicode正常化的爲您服務。

unorm是這種方法的JavaScript填充,因此您現在已經可以使用String.prototype.normalize()了,即使目前沒有一個引擎本身支持它。

有關何時以及如何在JavaScript中使用Unicode範式的更多信息,請參閱JavaScript has a Unicode problem – Accounting for lookalikes

0

我已經更新@bobince的回答是:

var cafe4= 'caf\u00E9'; 
var cafe5= 'cafe\u0301'; 


console.log (
    cafe4+' '+cafe4.length,     // café 4 
    cafe5+' '+cafe5.length,     // café 5 
    cafe4 === cafe5,       // false 
    cafe4.normalize() === cafe5.normalize() // true 
);