Unicode-Wert \ uXXXX zu Zeichen in Javascript
-
26-09-2019 - |
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);
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 ...