JavaScript native2ascii - Unicode karakterláncok átalakítása ASCII kompatibilis \uxxxx notációra
A probléma: Unicode String-eket olyan formába konvertálni, hogy az csak ASCII karaktereket tartalmazzon. Miért? Az
ékezetek számos problémát jelentenek... Néhány zárt forrású böngésző a JavaScript fájlokat mindenképpen úgy dolgozza
fel, mintha azok iso8859-1 karakterkódolásúak lennének, függetlenül attól, hogy a webszerver milyen Content-Type
-pal küldi el azokat. Az ékezetes szövegkonstansok ilyenkor gyönyörű kérdőjelekként jelennek meg...
Ezt a viselkedést úgy lehet megkerülni, hogy a JavaScript szövegkonstansokat '\u'-escaped hexadecimális notációval adjuk meg a forrásban. Erre a célra egy jó eszköz a Java SDK részeként elérhető native2ascii program, viszont előfordulhat olyan helyzet, amikor kliens oldalon van szükség az ékezetes szövegek átalakítására. Egy kis ihlet és negyed óra tucat sor JavaScriptet eredményezett.
A kód
/*jslint browser: false, white: true, undef: true, nomen: true */
function native2ascii(str) {
var out = "";
for (var i = 0; i < str.length; i++) {
if (str.charCodeAt(i) < 0x80) {
out += str.charAt(i);
} else {
var u = "" + str.charCodeAt(i).toString(16);
out += "\\u" + (u.length === 2 ? "00" + u : u.length === 3 ? "0" + u : u);
}
}
return out;
}
Próbáld ki!
Írj vagy másolj speciális karaktereket tartalmazó szöveget az első dobozba, a szkript az eredményt a második dobozba írja.