js实现特殊字符转Unicode编码

在以前盛行GBK编码时,为了避免乱码,我们经常用到Unicode编码,那么js是如何实现中文转Unicode的呢?

先来上代码:

function toUnicode(s){
    if(s == '' || typeof s !== 'string') return s;
    s=s.replace(/[\u00FF-\uFFFF]/g,function($0){
        return '\\u'+$0.charCodeAt().toString(16);
    });
    return s;
};

中文字符是双字节,转换的Unicode编码是\u开头,这里通过正则表达式完成了转换。

但是在遇到特殊字符时,上面的写法不行的,比如版权特殊字符:©2017

因为特殊字符是单字节,编码范围是不一样的,转换后的Unicode编码是\x开头的:

function toUnicode(str){
    return str.replace(/[\u0080-\uFFFF]/g, function(ch) {
        var code = ch.charCodeAt(0).toString(16);
        if (code.length <= 2) {
            while (code.length < 2) code = "0" + code;
            return "\\x" + code;
        } else {
            while (code.length < 4) code = "0" + code;
            return "\\u" + code;
        }
    });
};

通过转换后的长度来判断是双字节还是单字节,然后再做不同的处理。

版权字符©就能成功被转换成 \xa9 

本文由 w3cmark_前端笔记 版权所有,转载时请注明出处。
注明出处格式:w3cmark (http://www.w3cmark.com/2017/564.html)

分享到:

关注w3cmark
微信公众号 w3cmark_com