lebyrus

Convertir caracteres Unicode griegos a Windows CodePage 1253

¿Tienes que hacer una web en Flash en varios idiomas y uno de ellos es el Griego? Ese ha sido mi drama particular en los últimos tres días.

Estoy más que acostumbrado a trabajar con Unicode para cargar textos externos en Flash mediante XML, evitando así los problemas de caracteres especiales (como las ñ, las tildes, etc.), eso sí, siempre incrustando las fuentes que necesitaba.

Pero eso no funcionaba con el dichoso Griego. Asi que tras dar muchas vueltas por Google, Macromedia, consejos, pistas y foros, terminé aprendiendo a incrustar los caracteres griegos (Arial Greek, en mi caso), y a convertir los caracteres Unicode a la tabla de códigos que usa Windows para los caracteres griegos: 1253.

Es un prototipo AS 1.0 un tanto rudimentario, y lento, y espero poder mejorarlo más adelante. Pero al menos funciona, así que aquí lo dejo, por si alguien lo necesita.

String.prototype.unicodeToGriego = function() {
// Prototipo creado por Sergio Gómez.
// Puedes usarlo y mejorarlo como te dé la gana.
// Aunque si lo mejoras y avisas, pues mejor que mejor ;-)
// Convierte caracteres Unicode griegos a Windows CodePage1253
// ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1253.TXT
var tmpStr = "";
for(var i=0; i<this.length; i++) {
switch(this.charCodeAt(i)){
case 0x0385: tmpStr += String.fromCharCode(0xA1); break;
case 0x0386: tmpStr += String.fromCharCode(0xA2); break;
case 0x0384: tmpStr += String.fromCharCode(0xB4); break;
case 0x0388: tmpStr += String.fromCharCode(0xB8); break;
case 0x0389: tmpStr += String.fromCharCode(0xB9); break;
case 0x038A: tmpStr += String.fromCharCode(0xBA); break;
case 0x038C: tmpStr += String.fromCharCode(0xBC); break;
case 0x038E: tmpStr += String.fromCharCode(0xBE); break;
case 0x038F: tmpStr += String.fromCharCode(0xBF); break;
case 0x0390: tmpStr += String.fromCharCode(0xC0); break;
case 0x0391: tmpStr += String.fromCharCode(0xC1); break;
case 0x0392: tmpStr += String.fromCharCode(0xC2); break;
case 0x0393: tmpStr += String.fromCharCode(0xC3); break;
case 0x0394: tmpStr += String.fromCharCode(0xC4); break;
case 0x0395: tmpStr += String.fromCharCode(0xC5); break;
case 0x0396: tmpStr += String.fromCharCode(0xC6); break;
case 0x0397: tmpStr += String.fromCharCode(0xC7); break;
case 0x0398: tmpStr += String.fromCharCode(0xC8); break;
case 0x0399: tmpStr += String.fromCharCode(0xC9); break;
case 0x039A: tmpStr += String.fromCharCode(0xCA); break;
case 0x039B: tmpStr += String.fromCharCode(0xCB); break;
case 0x039C: tmpStr += String.fromCharCode(0xCC); break;
case 0x039D: tmpStr += String.fromCharCode(0xCD); break;
case 0x039E: tmpStr += String.fromCharCode(0xCE); break;
case 0x039F: tmpStr += String.fromCharCode(0xCF); break;
case 0x03A0: tmpStr += String.fromCharCode(0xD0); break;
case 0x03A1: tmpStr += String.fromCharCode(0xD1); break;
case 0x03A3: tmpStr += String.fromCharCode(0xD3); break;
case 0x03A4: tmpStr += String.fromCharCode(0xD4); break;
case 0x03A5: tmpStr += String.fromCharCode(0xD5); break;
case 0x03A6: tmpStr += String.fromCharCode(0xD6); break;
case 0x03A7: tmpStr += String.fromCharCode(0xD7); break;
case 0x03A8: tmpStr += String.fromCharCode(0xD8); break;
case 0x03A9: tmpStr += String.fromCharCode(0xD9); break;
case 0x03AA: tmpStr += String.fromCharCode(0xDA); break;
case 0x03AB: tmpStr += String.fromCharCode(0xDB); break;
case 0x03AB: tmpStr += String.fromCharCode(0xDB); break;
case 0x03AC: tmpStr += String.fromCharCode(0xDC); break;
case 0x03AD: tmpStr += String.fromCharCode(0xDD); break;
case 0x03AE: tmpStr += String.fromCharCode(0xDE); break;
case 0x03AF: tmpStr += String.fromCharCode(0xDF); break;
case 0x03B0: tmpStr += String.fromCharCode(0xE0); break;
case 0x03B1: tmpStr += String.fromCharCode(0xE1); break;
case 0x03B2: tmpStr += String.fromCharCode(0xE2); break;
case 0x03B3: tmpStr += String.fromCharCode(0xE3); break;
case 0x03B4: tmpStr += String.fromCharCode(0xE4); break;
case 0x03B5: tmpStr += String.fromCharCode(0xE5); break;
case 0x03B6: tmpStr += String.fromCharCode(0xE6); break;
case 0x03B7: tmpStr += String.fromCharCode(0xE7); break;
case 0x03B8: tmpStr += String.fromCharCode(0xE8); break;
case 0x03B9: tmpStr += String.fromCharCode(0xE9); break;
case 0x03BA: tmpStr += String.fromCharCode(0xEA); break;
case 0x03BB: tmpStr += String.fromCharCode(0xEB); break;
case 0x03BC: tmpStr += String.fromCharCode(0xEC); break;
case 0x03BD: tmpStr += String.fromCharCode(0xED); break;
case 0x03BE: tmpStr += String.fromCharCode(0xEE); break;
case 0x03BF: tmpStr += String.fromCharCode(0xEF); break;
case 0x03C0: tmpStr += String.fromCharCode(0xF0); break;
case 0x03C1: tmpStr += String.fromCharCode(0xF1); break;
case 0x03C2: tmpStr += String.fromCharCode(0xF2); break;
case 0x03C3: tmpStr += String.fromCharCode(0xF3); break;
case 0x03C4: tmpStr += String.fromCharCode(0xF4); break;
case 0x03C5: tmpStr += String.fromCharCode(0xF5); break;
case 0x03C6: tmpStr += String.fromCharCode(0xF6); break;
case 0x03C7: tmpStr += String.fromCharCode(0xF7); break;
case 0x03C8: tmpStr += String.fromCharCode(0xF8); break;
case 0x03C9: tmpStr += String.fromCharCode(0xF9); break;
case 0x03CA: tmpStr += String.fromCharCode(0xFA); break;
case 0x03CB: tmpStr += String.fromCharCode(0xFB); break;
case 0x03CC: tmpStr += String.fromCharCode(0xFC); break;
case 0x03CD: tmpStr += String.fromCharCode(0xFD); break;
case 0x03CE: tmpStr += String.fromCharCode(0xFE); break;
default: tmpStr += this.charAt(i);
}
}
return tmpStr;
}

Modo de uso: texto = texto.unicodeToGriego();

03/06/2004

Proyectos

  • Logotipo de Cordobapedia
  • nuno21 - Foro en español de Nuno Bettencourt
  • Microflog

Last.fm

 

Discos

  • Population 1 - Population 1 (2002)
  • Extreme - Saudades de Rock (2008)
  • Rockabye Baby! Lullaby Renditions of Metallica
  • Portada de Pearl Jam - Pearl Jam (2006)
  • Hay mucho Rock'n Roll - Platero y Tú

Mi blog soporta myComments

La culpa de todo no fue sólo mía...