Манипулирование JavaScript Unicode

#javascript #unicode

#javascript #юникод

Вопрос:

В приведенном ниже коде JavaScript первый выводит правильный символ (греческую гамму), а второй выводит строку ‘u03b8’.

 var full_uni='u03b8';
var part_uni='\'   'u03b8';
console.log(full_uni);
console.log(part_uni);
  

Мои вопросы

  1. Почему?
  2. Как я могу печатать full_uni как ‘ u03b8’ (или аналогичный) и / или печатать part_uni как правильный символ?

Комментарии:

1. var part_uni='u03' 'b8'; это приведет к ошибке

2. @GovindSinghNagarkoti — да, это так! Я изменил его так, чтобы он работал.

3. итак, это ваш ответ, оба они разные

4. Обратите внимание, что у вас есть \ во втором? Неудивительно, \u03b8 что выводится как u03b8 !

5. @NiettheDarkAbsol — Мне пришлось добавить вторую обратную косую черту, иначе первая не попадала бы в закрывающую одинарную кавычку, и она горько жаловалась. Возможно, я плохо сформулировал вопрос. Может быть, мне следовало спросить: «Как мне программно генерировать символы Юникода и как я могу преобразовать юникод обратно в шестнадцатеричный для дальнейших манипуляций?»

Ответ №1:

Хотя нет встроенного способа перехода между ними, вы можете создавать функции для этого.

 function decodeUnicodeSequence(str) {
    return str.replace(/\u([0-9a-f]{4})/ig,function(_,hex) {
        return String.fromCharCode(parseInt(hex,16));
    });
}
function encodeUnicodeSequence(str) {
    return str.replace(/[u00a0-uffff]/g,function(chr) {
        return "\u" ("00" chr.charCodeAt(0).toString(16)).slice(-4);
    });
}
  

Комментарии:

1. Я наполовину ожидал, что в качестве ответа будет «невозможно». Странно, что в langugage нет встроенного способа преобразования между ними. Однако спасибо за альтернативный код.

2. @garethTheRed Я буквально никогда не видел никакой необходимости конвертировать между ними раньше. Я знаю, что языки иногда имеют неясные функции, но что-то вроде этого просто так … ненужно, большую часть времени. Кроме того, если бы в родном языке было все, для чего нам понадобилась бы возможность определять наши собственные функции? 😉

3. Для онлайн-инструмента, который преобразует между ними, см. JavaScript escapes . Он использует библиотеку JavaScript jsesc для создания максимально компактного экранированного вывода.