Frage

Ich habe das noch nie gemacht und bin sicher nicht, warum es die berüchtigte Zeichencodierung ausgibt. Alle Ideen, wie die Ausgabe Zeichen, wie sie sollten (ASCII + Unicode)? Ich denke, \u0041-\u005A A-Z in UTF-8 gedruckt werden soll, die Firefox Berichterstattung ist die Seite-Codierung.

   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);
War es hilfreich?

Lösung

Die .fromCharCode() Funktion nimmt eine Zahl, keinen String. Sie können nicht eine Zeichenfolge wie das und erwarten, dass der Parser zusammen zu tun, was Sie denken, es werde tun; Das ist einfach nicht die Art, wie die Sprache funktioniert.

Sie können Ihren Code ammend um einen String zu machen (ohne die '\ u') aus dem Hex-Zahl und Anruf

var n = parseInt(hexString, 16);

, um den Wert zu erhalten. Dann könnten Sie rufen .fromCharCode() mit , die Wert.

Andere Tipps

Ein nützlicher Schnipsel für das Ersetzen all Unicode-codierten Sonderzeichen in einem Text lautet:

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

Mit replace , fromCharCode und parseInt

Wenn Sie die \unnnn Syntax erstellen Zeichen verwenden möchten, müssen Sie in den Code, der in einer Zeichenkette tun. Wenn Sie es dynamisch tun wollen, müssen Sie es in einer Zeichenkette tun, die zur Laufzeit ausgewertet wird:

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

Natürlich nur String.fromCharCode(i) mit wäre viel einfacher ...

sein
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top