valeur Unicode \ uXXXX à caractère en Javascript
-
26-09-2019 - |
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);
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 ...