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.laoono.com/learn/2014/FE/unicode.html

本文地址 https://shaoshilei.com/2014-03/how-to-use-javascript-unicode-string-encoding-and-decoding-operations-.html