2011-10-14 21 views
11

Tengo la impresión de que el intérprete de JavaScript supone que el código fuente que está interpretando ya se ha normalizado. ¿Qué hace exactamente la normalización? No puede ser el editor de texto; de lo contrario, la representación de texto sin formato de la fuente podría cambiar. ¿Hay algún "preprocesador" que haga la normalización?Normalización de JavaScript Unicode

+1

El motor del navegador creo que es lo que lo maneja. Por eso tiene discrepancias entre los navegadores sobre lo que hacen y lo que no admiten. – Ryan

Respuesta

13

No, no hay ninguna característica de normalización Unicode utilizada automáticamente en JavaScript, o incluso está disponible según ECMAScript 5. Todos los caracteres permanecen sin cambios como su código original apunta, potencialmente en un formato no normal.

por ejemplo intento:

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

Actualización:ECMAScript 6 will introduce Unicode normalization for JavaScript strings.

+1

Debe señalarse que JavaScript * PREDATES * UTF-16 y realmente expone UCS-2. (Lo que usa internamente puede o no ser UTF-16, pero saca a UCS-2). –

13

ECMAScript 6 introduce String.prototype.normalize() que se encarga de la normalización de Unicode para usted.

unorm es un polyfill de JavaScript para este método, por lo que ya puede usar String.prototype.normalize() hoy en día aunque no hay un solo motor que lo admita de forma nativa en este momento.

Para obtener más información sobre cómo y cuándo utilizar la normalización Unicode en JavaScript, consulte JavaScript has a Unicode problem – Accounting for lookalikes.

0

He actualizado respuesta @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 
); 
Cuestiones relacionadas