Javascript, конвертировать строку unicode в Javascript escape?
У меня есть переменная, которая содержит строку, состоящую из японских символов, например:
"み ど り い ろ"
Как мне перейти на преобразование этой формы в Javascript?
В результате я хочу, чтобы следующий результат:
"\ u306f\u3044\u3044\u308d"
Я бы предпочел использовать jquery-подход, если есть вариант.
Ответы
Ответ 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);
});
}