2011-10-14 39 views
11

Tôi đang ở trong ấn tượng rằng trình thông dịch JavaScript giả định rằng mã nguồn mà nó đang diễn giải đã được chuẩn hóa. Gì, chính xác hóa việc bình thường hóa? Nó không thể là trình soạn thảo văn bản, nếu không thì biểu diễn thô sơ của nguồn sẽ thay đổi. Có một số "preprocessor" mà không bình thường hóa?JavaScript chuẩn hóa Unicode

+1

Động cơ trình duyệt Tôi tin là những gì xử lý nó. Đó là lý do tại sao bạn có sự khác biệt giữa các trình duyệt về những gì họ làm và không hỗ trợ. – Ryan

Trả lời

13

Không, không có tính năng Unicode chuẩn hóa được sử dụng tự động trên — hoặc thậm chí có sẵn cho-JavaScript theo ECMAScript 5. Tất cả các ký tự vẫn không thay đổi như các điểm mã ban đầu của chúng, có khả năng ở dạng không bình thường.

ví dụ thử:

<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> 

Cập nhật:ECMAScript 6 will introduce Unicode normalization for JavaScript strings.

+1

Cần chỉ ra rằng JavaScript * PREDATES * UTF-16 và thực sự hiển thị UCS-2. (Những gì nó sử dụng trong nội bộ có thể hoặc có thể không được UTF-16, nhưng nó đá UCS-2 ra.) –

13

ECMAScript 6 giới thiệu String.prototype.normalize() mà sẽ chăm sóc của Unicode bình thường cho bạn.

unorm là một chồng chéo JavaScript cho phương pháp này, do đó bạn đã có thể sử dụng String.prototype.normalize() ngay hôm nay mặc dù không phải là một động cơ duy nhất hỗ trợ nó ngay tại thời điểm này.

Để biết thêm thông tin về cách thức và thời điểm sử dụng tính năng chuẩn hóa Unicode trong JavaScript, hãy xem JavaScript has a Unicode problem – Accounting for lookalikes.

0

Tôi đã cập nhật câu trả lời @ bobince 's:

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 
); 
Các vấn đề liên quan