Значение Unicode\uXXXX для символа в Javascript
Я никогда не делал этого раньше и не знаю, почему он выводит печально известный символ кодировки �
. Любые идеи о том, как выводить символы по своему усмотрению (ASCII + Unicode)? Я думаю, что \u0041
- \u005A
должен печатать A-Z
в UTF-8, о котором сообщает Firefox, является кодировка страницы.
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);
Ответы
Ответ 1
Функция .fromCharCode()
принимает число, а не строку. Вы не можете собрать такую строку и ожидать, что парсер сделает то, что, по вашему мнению, будет делать; это не то, как язык работает.
Вы можете изменить свой код, чтобы сделать строку (без "\ u" ) из вашего шестнадцатеричного номера, и вызвать
var n = parseInt(hexString, 16);
чтобы получить значение. Затем вы можете вызвать .fromCharCode()
с этим значением.
Ответ 2
Полезный фрагмент для замены всех специальных символов в кодировке Unicode в тексте:
var rawText = unicodeEncodedText.replace(
/\\u([0-9a-f]{4})/g,
function (whole, group1) {
return String.fromCharCode(parseInt(group1, 16));
}
);
Используя replace
, fromCharCode
и parseInt
Ответ 3
Если вы хотите использовать синтаксис \unnnn
для создания символов, вы должны сделать это в литеральной строке в коде. Если вы хотите сделать это динамически, вы должны сделать это в строке, которая оценивается во время выполнения:
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);
Конечно, просто использовать String.fromCharCode(i)
было бы намного проще...