Значение Юникода \ uXXXX в Символ в Javascript - PullRequest
12 голосов
/ 01 октября 2010

Я никогда не делал этого раньше и не уверен, почему он выводит печально известный символ кодирования. Любые идеи о том, как выводить символы, как они должны (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);

Ответы [ 3 ]

21 голосов
/ 01 октября 2010

Функция .fromCharCode() принимает число, а не строку. Вы не можете собрать подобную строку и ожидать, что парсер будет делать то, что, как вы думаете, он будет делать; это просто не так, как работает язык.

Вы можете изменить свой код, чтобы сделать строку (без '\ u') из своего шестнадцатеричного номера, и позвонить

var n = parseInt(hexString, 16);

, чтобы получить значение. Тогда вы могли бы позвонить .fromCharCode() с этим значением.

8 голосов
/ 01 июля 2013

Полезный фрагмент для замены всех специальных символов в кодировке Юникод:

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

Использование replace, fromCharCode и parseInt

4 голосов
/ 01 октября 2010

Если вы хотите использовать синтаксис \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) было бы намного проще ...

...