Javascript,将unicode字符串转换为Javascript转义?

时间:2014-01-09 07:51:32

标签: javascript jquery unicode

我有一个变量,其中包含一个由日语字符组成的字符串,例如;

“みどりいろ”

我如何将其转换为其Javascript转义表单?

我特别关注这个例子的结果是:

“\ u306f \ u3044 \ u3044 \ u308d”

如果有变化,我更喜欢jquery方法。

6 个答案:

答案 0 :(得分:29)

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

这将为您提供unicode(十六进制)。您可以通过循环运行它:

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

答案 1 :(得分:5)

以上回答是合理的。轻微的空间和性能优化:

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

答案 2 :(得分:4)

escape("みどりいろ")

应该满足大多数情况下的需求,如果您需要“\ 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是可选的,使其看起来与第一篇文章完全相同)

它不会逃避在大多数情况下不需要的字符,这对你来说可能是一个加分;如果没有 - 请参阅Derek的回答,或使用我的版本:

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

答案 3 :(得分:1)

我的代码版本,基于先前的答案。我使用if来转换JSON.stringify()中的非UTF8字符。

const toUTF8 = string =>
    string.split('').map(
        ch => !ch.match(/^[^a-z0-9\s\t\r\n_|\\+()!@#$%^&*=?/~`:;'"\[\]\-]+$/i)
            ? ch
            : '\\' + 'u' + '000' + ch.charCodeAt(0).toString(16)
    ).join('');

用法:

JSON.stringify({key: 'Категория дли импорта'}, (key, value) => {
    if (typeof value === "string") {
        return toUTF8(value);
    }

    return value;
});

返回JSON:

{"key":"\\u00041a\\u000430\\u000442\\u000435\\u000433\\u00043e\\u000440\\u000438\\u00044f \\u000434\\u00043b\\u000438 \\u000438\\u00043c\\u00043f\\u00043e\\u000440\\u000442\\u000430"}

答案 4 :(得分:0)

我对这个问题有一个答案。我做的这个功能对我有用。仅将非utf-8字符编码为Unicode。

function toUnicode(word){
       let array = word.split("");
       array =  array.map((character)=>{
                if(character.match(/[^a-zA-Z]/g)){
                    let conversion = "000" + character.charCodeAt(0).toString(16)
                    return "\\u" + conversion;
                 }
                 return character;
});
return array.join("")
}

答案 5 :(得分:-1)

只需使用 encodeURI 函数:

encodeURI("みどりいろ")
"%E3%81%BF%E3%81%A9%E3%82%8A%E3%81%84%E3%82%8D"

另一方解码回来:

decodeURI("%E3%81%BF%E3%81%A9%E3%82%8A%E3%81%84%E3%82%8D")
"みどりいろ"