Question

Je ne l'ai jamais fait cela avant et ne sais pas pourquoi il est le délivrer en sortie infâme codage de caractères. Toutes les idées sur la façon de caractères de sortie comme ils le devraient (ASCII + Unicode)? Je pense que \u0041-\u005A devrait imprimer A-Z en UTF-8, Firefox est des rapports est le codage de la page.

   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);
Était-ce utile?

La solution

La fonction .fromCharCode() prend un certain nombre, pas une chaîne. Vous ne pouvez pas mettre sur pied une chaîne comme ça et attendre l'analyseur pour faire ce que vous pensez qu'il va faire; c'est tout simplement pas la façon dont les travaux linguistiques.

Vous pourriez ammend votre code pour une chaîne (sans le « \ u ») à partir de votre numéro hexadécimal et appel

var n = parseInt(hexString, 16);

pour obtenir la valeur. Ensuite, vous pouvez appeler .fromCharCode() avec que valeur.

Autres conseils

Un fragment utile pour remplacer tous les caractères spéciaux Unicode dans un texte est le suivant:

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

Utilisation replace , fromCharCode et parseInt

Si vous voulez utiliser la syntaxe \unnnn pour créer des personnages, vous devez le faire dans une chaîne de caractères dans le code. Si vous voulez le faire dynamiquement, vous devez le faire dans une chaîne littérale qui est évaluée lors de l'exécution:

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);

Bien sûr, tout en utilisant String.fromCharCode(i) serait beaucoup plus facile ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top