Подтвердить что ты не робот

Javascript, конвертировать строку unicode в Javascript escape?

У меня есть переменная, которая содержит строку, состоящую из японских символов, например:

"み ど り い ろ"

Как мне перейти на преобразование этой формы в Javascript?

В результате я хочу, чтобы следующий результат:

"\ u306f\u3044\u3044\u308d"

Я бы предпочел использовать jquery-подход, если есть вариант.

4b9b3361

Ответ 1

"み".charCodeAt(0).toString(16);

Это даст вам unicode (в Hex). Вы можете запустить его через цикл:

String.prototype.toUnicode = function(){
    var result = "";
    for(var i = 0; i < this.length; i++){
        // Assumption: all characters are < 0xffff
        result += "\\u" + ("000" + this[i].charCodeAt(0).toString(16)).substr(-4);
    }
    return result;
};

"みどりいろ".toUnicode();       //"\u307f\u3069\u308a\u3044\u308d"
"Mi Do Ri I Ro".toUnicode();  //"\u004d\u0069\u0020\u0044\u006f\u0020\u0052\u0069\u0020\u0049\u0020\u0052\u006f"
"Green".toUniCode();          //"\u0047\u0072\u0065\u0065\u006e"

Демо: http://jsfiddle.net/DerekL/X7MCy/

Подробнее: .charCodeAt

Ответ 2

только

escape("みどりいろ")

должен удовлетворять потребностям в большинстве случаев, buf, если вам это нужно в форме "\ u" вместо "% xx" / "% uxxxx", тогда вы можете использовать регулярные выражения:

escape("みどりいろ").replace(/%/g, '\\').toLowerCase()

escape("みどりいろ").replace(/%u([A-F0-9]{4})|%([A-F0-9]{2})/g, function(_, u, x) { return "\\u" + (u || '00' + x).toLowerCase() });

(toLowerCase необязательно, чтобы он выглядел точно так же, как в первом сообщении)

Он не избегает символов, в которых он не нужен в большинстве случаев, что может быть плюсом для вас; если нет - см. ответ Дерека или используйте мою версию:

'\\u' + "みどりいろ".split('').map(function(t) { return ('000' + t.charCodeAt(0).toString(16)).substr(-4) }).join('\\u');

Ответ 3

Выше ответ разумный. Небольшая оптимизация пространства и производительности:

function escapeUnicode(str) {
    return str.replace(/[^\0-~]/g, function(ch) {
        return "\\u" + ("0000" + ch.charCodeAt().toString(16)).slice(-4);
    });
}