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.

© 2003-2020 lithium.io7.org
Erre a weblapra a Creative Commons Nevezd meg! - Így add tovább! 3.0 Unported Licensz vonatkozik.