De forma predeterminada, String.prototype.normalize() usa NFC como argumento. NFC reemplaza múltiples caracteres con uno solo.
Puede especificar "NFC" para obtener la forma canónica compuesta, en la que varios puntos de código se reemplazan con puntos de código únicos siempre que sea posible.
Y aquí hay un ejemplo de MDN. Funciona.
let str = '\u006E\u0303'; str = str.normalize(); console.log(`${str}: ${str.length}`);Pero luego decidí probar este método con otros personajes. Por ejemplo:
let str = '\u0057\u0303'; str = str.normalize(); console.log(`${str}: ${str.length}`);¿Qué hay de malo en el segundo ejemplo? ¿Por qué no funciona?
No reemplaza múltiples caracteres , reemplaza múltiples puntos de código y solo donde sea posible .
ñ , al ser un carácter que se usa en español , tiene su propio punto de código en Unicode: — U+00D1 — así que puedes decir ñ en lugar de "Toma una n y luego ponle una ~ encima".
W̃ , al ser una representación de un sonido fónico , no tiene su propio punto de código. Es un carácter que se usa relativamente raramente, por lo que no se le ha dado un espacio precioso en los bits más eficientes de Unicode. La única forma en que puedes tener uno es decir "Toma una W y luego ponle un ~ encima".