Pregunta

Nunca he hecho esto antes y no estoy seguro de por qué está dando salida a la infame codificación de caracteres. Cualquier ideas sobre cómo caracteres de salida como deberían (ASCII + Unicode)? Creo \u0041-\u005A debe imprimir A-Z en UTF-8, que Firefox es la presentación de informes es la codificación de página.

   var c   = new Array("F","E","D","C","B","A",9,8,7,6,5,4,3,2,1,0);
   var n   = 0;
   var d   = "";
   var o   = "";

   for (var i=16;i--;){
      for (var j=16;j--;){
         for (var k=16;k--;){
            for (var l=16;l--;){

               d =  c[i].toString()
                 +  c[j].toString()
                 +  c[k].toString()
                 +  c[l].toString();

               o += ( ++n + ": " 
                    + d   + " = " 
                    + String.fromCharCode("\\u" + d) 
                    + "\n<br />" );

               if(n>=500){i=j=k=l=0;} // stop early
            }
         }
      }
   }

   document.write(o);
¿Fue útil?

Solución

La función .fromCharCode() lleva un número, no una cadena. No se puede poner juntos una cadena así y esperar que el analizador para hacer lo que crees que va a hacer; eso no es la forma en que funciona el lenguaje.

Se podría enmendar su código para hacer una cadena (sin el '\ u') de su número hexadecimal, y la llamada

var n = parseInt(hexString, 16);

para obtener el valor. Posteriormente, se podría llamar .fromCharCode() con que valor.

Otros consejos

Un fragmento útil para la sustitución de todos los caracteres especiales Unicode codificada en un texto es:

var rawText = unicodeEncodedText.replace(
                  /\\u([0-9a-f]{4})/g, 
                  function (whole, group1) {
                      return String.fromCharCode(parseInt(group1, 16));
                  }
              );

Uso replace , fromCharCode y parseInt

Si desea utilizar la sintaxis \unnnn para crear personajes, lo que tiene que hacer eso en una cadena literal en el código. Si desea hacerlo de forma dinámica, hay que hacerlo de una cadena literal que se evalúa en tiempo de ejecución:

var hex = "0123456789ABCDEF";
var s = "";
for (var i = 65; i <= 90; i++) {
  var hi = i >> 4;
  var lo = i % 16;
  var code = "'\\u00" + hex[hi] + hex[lo] + "'";
  var char = eval(code);
  s += char;
}
document.write(s);

Por supuesto, sólo usando String.fromCharCode(i) sería mucho más fácil ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top