Преобразование текста в Unicode в JavaScript - PullRequest
1 голос
/ 18 января 2012

У меня есть следующее:

function showUnicode()
{
  var text = prompt( 'Enter the wanted text', 'Unicode' ),
      unicode = 0,
      ntext,
      temp,
      i = 0
  ;

  // got the text now transform it in unicode
  for(i; i < text.length; i++)
  {
    unicode += text.charCodeAt(i)

  }

  // now do an alert
  alert( 'Here is the unicode:\n' + unicode + '\nof:\n' + text )

}

Спасибо за идею инициализации Юникода, но теперь переменная Юникода получает Юникод последнего символа, почему?

Ответы [ 3 ]

4 голосов
/ 02 февраля 2012

JavaScript использует UCS-2 для внутреннего использования.

Это означает, что дополнительные символы Unicode отображаются как две отдельные единицы кода (суррогатные половины).Например, '?'.length == 2, хотя это только один символ Unicode.

Из-за этого, если вы хотите получить кодовую точку Unicode для каждого символа в строке, вам необходимо преобразовать UCS-2 строка в массив кодовых точек UTF-16 (где каждая суррогатная пара образует одну кодовую точку).Для этого вы можете использовать служебные функции Punycode.js :

punycode.ucs2.decode('abc'); // [97, 98, 99]
punycode.ucs2.decode('?'); // [119558]
2 голосов
/ 18 января 2012

Вы должны инициализировать переменную unicode чем-то, или вы добавляете коды символов в undefined.

1 голос
/ 18 января 2012

NaN = не число

Вам нужно инициализировать "юникод" как числовой тип:

var unicode = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...