2011-10-14 21 views
11

Ho l'impressione che l'interprete JavaScript presupponga che il codice sorgente che sta interpretando sia già stato normalizzato. Cosa fa esattamente la normalizzazione? Non può essere l'editor di testo, altrimenti la rappresentazione in chiaro della sorgente cambierebbe. C'è un "preprocessore" che fa la normalizzazione?Normalizzazione JavaScript Unicode

+1

Il motore del browser credo è quello che gestisce. Ecco perché hai le discrepanze tra i browser su ciò che fanno e non supportano. – Ryan

risposta

13

No, non esiste alcuna funzione di normalizzazione Unicode utilizzata automaticamente o anche disponibile per JavaScript come da ECMAScript 5. Tutti i caratteri rimangono invariati come i loro punti di codice originali, potenzialmente in forma non normale.

ad esempio prova:

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

Aggiornamento:ECMAScript 6 will introduce Unicode normalization for JavaScript strings.

+1

Va sottolineato che JavaScript * PREDE * UTF-16 e espone effettivamente UCS-2. (Quello che usa internamente può essere o non essere UTF-16, ma caccia fuori UCS-2.) –

13

ECMAScript 6 introduce String.prototype.normalize() che si occupa di normalizzazione Unicode per voi.

unorm è un polyfill JavaScript per questo metodo, quindi è possibile utilizzare già String.prototype.normalize() anche se al momento non è supportato un singolo motore in modo nativo.

Per ulteriori informazioni su come e quando utilizzare la normalizzazione Unicode in JavaScript, vedere JavaScript has a Unicode problem – Accounting for lookalikes.

0

Ho aggiornato la risposta s' @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 
);