unicode编码简单释义:unicode编码也叫统一码、万国码,是一种在计算机上使用的字符编码。unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。以上摘自百度百科,想深入了解的同学,可以自行找下度娘。


那么在js里,如何来使用unicode格式的编码,来表示一个字符呢?在我们web开发中,经常会遇见”\u0031”,这种形式的字符串。复习一遍js关于字符串数据类型的介绍,其中找到如下解释:字面量\unnnn 表示以十六进制代码nnnn来代表一个unicode字符(n为0-F)。例如刚才提到的“\u0031”表示数字1,“\u03a3”表示希腊字母“Σ”。

js unicode是以十六进制代码外加开头\u表示的字符串。即\unnnn,如何才能将任意字符转换成这种形式呢?首先要得到字符的 Unicode 编码,然后再将其转化成十六进制编码,那么js unicode字符编码的问题就迎刃而解,在javascript里,有一个字符串方法:charCodeAt();这个方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。需要传入一个参数:这个是参数表示字符串中某个位置的数字,即字符在字符串中的下标。例如:

var str = "123";
console.log(str.charCodeAt(0)) //49 字符1的unicdoe编码是:49。

得到了字符的unicode编码,再使用字符串方法:toString(16)。就得到了js unicode的十六进制代码。例如:

var str = "123";
str = str.charCodeAt(0);
console.log(str.toString(16)) // 31

字符1的unicode编码的十六进制是31,我们需要的js unicode字面量形式是\unnnn;所以字符1的js unicdoe编码就是\u0031(使用00补足4位)。

我们可以写个方法来实现这一功能,先贴下代码:

var Unicode = {

    stringify: function (str) {

        var res = [],
            len = str.length;

        for (var i = 0; i < len; ++i) {
            res[i] = ("00" + str.charCodeAt(i).toString(16)).slice(-4);
        }

        return str ? "\\u" + res.join("\\u") : "";
    },

    parse: function (str) {

        str = str.replace(/\\/g, "%");
        return unescape(str);
    }
};


unicode.stringify()是js unicode编码方法,方法里循环了字符串里每个字符unicode=》十六进制的操作,其中slice(-4),是为了保证每个字符的十六进制都是nnnn的形式。然后再操作数组使每项加入”\u”,“\”要进行字符串转义。所以传入的参数是“\u”。


unicode.parse()是js unicode解码方法,这个方法很简单了,直接使用unescape()方法,该函数的工作原理是这样的:通过找到形式为 %xx 和 %uxxxx 的字符序列(x 表示十六进制的数字),用 Unicode 字符 \u00xx 和 \uxxxx 替换这样的字符序列进行解码。所以操作之前,先把“\u”替换成“%”。

js unicode 操作demo: http://www.laoona.com/learn/2014/FE/unicode.html

本文地址 https://laoona.com/post/227b97c4.html