以编程方式在Javascript中转换和存储unicode字符串

时间:2015-11-30 22:57:47

标签: javascript unicode

上下文

我想将javascript中的字符串转换为unicode表示形式,这样我就可以用它做一些时髦的事情。

我的意思的一些例子:

我可以写

eval('\u0076\u0061\u0072 \u006a \u003d \u0022\u0068\u0069\u0022');
// This is `var j = "hi"`.
// For clarity, I kept \u0020 as a space.

我可以

eval('\u0076\u0061\u0072 \\u006a \u003d \u0022\\u0068\\u0069\u0022');
// Here I've escaped the backslash
// on the variable name and string

这些是等效的,都会产生j == 'hi'

有什么好处,我可以做到以下几点:

var val = '\\u0068\\u0069';
var key = '\\u006a';
eval('\u0076\u0061\u0072 ' + key + ' \u003d \u0022' + val +  '\u0022');

这允许我以编程方式生成keyval的值,使用以下内容:

function uEncode(str) {
    var hex, i;
    var result = "";
    for (i=0; i < str.length; i++) {
        hex = str.charCodeAt(i).toString(16);
        result += "\\u" + ("000"+hex).slice(-4);
    }
    return result;
}

问题

喜欢做的是能够做到以下几点:

eval(uEncode('var j = "hi"'));

这不起作用,因为uEncode将转义var关键字(\u0076\u0061\u0072)上的反斜杠以及以下字符:=\u003d) ,\u0020)和"\u0022)。

如果任何 javascript关键字或符号的unicode上的反斜杠被转义,则eval会引发语法错误。

不幸的是,这不是一个可以通过简单的

解决的问题
eval(unescape(uEncode('var j = "hi"')));

是否有任何方法来完成此任务?

1 个答案:

答案 0 :(得分:1)

eval(JSON.parse('"'+uEncode('var j = "hi"')+'"'))