有时候, 我们在给后端传递变量的的值中有汉字, 可能由于编码的原因, 传递到后端后变为乱码了所以有时候为了省事或者其它特殊要求的时候, 会把传递的汉字转换成 Unicode 编码后再进行传递
当然汉字转换成 unicode 编码, 使用 JS 的 charCodeAt() 方法就可以
- '好'.charCodeAt(0).toString(16)
- "597d"
这段代码的意思是, 把字符'好'转化成 Unicode 编码, toString() 就是把字符转化成 16 进制了
用法: charCodeAt() 方法可返回指定位置的字符的 Unicode 编码这个返回值是 0 - 65535 之间的整数
语法: stringObject.charCodeAt(index)
index 参数必填, 表示字符串中某个位置的数字, 即字符在字符串中的下标
注: 字符串中第一个字符的下标是 0 如果 index 是负数, 或大于等于字符串的长度, 则 charCodeAt() 返回 NaN
例如:
- var str="Hello world!"
- document.write(str.charCodeAt(1))
- // 结果: 101
- '好哦'.charCodeAt(0).toString(16)
- "597d"
- '好哦'.charCodeAt(1).toString(16)
- "54e6"
要是想把 unicode 解码成字符呢?
要想对 Unicode 解码的话, 必须要用转义字符'\u'
'\u54e6'
"哦"
总结下:
js unicode 是以十六进制代码外加开头 \ u 表示的字符串即 \ unnnn
Unicode 是为了解决传统的字符编码方案的局限而产生的, 它为每种语言中的每个字符设定了统一并且唯一的二进制编码, 以满足跨语言跨平台进行文本转换处理的要求 1990 年开始研发, 1994 年正式公布
下面先看一个简单的例子, 汉字转化为 unicode 方法:
- function toUnicodeFun(data) {
- if (data == '' || typeof data == 'undefined') return '请输入汉字';
- var str = '';
- for (var i = 0; i < data.length; i++) {
- str += "\\u" + data.charCodeAt(i).toString(16);
- }
- return str;
- }
- var resultUnicode = toUnicodeFun('中国'); // \u4e2d\u56fd
- console.log(resultUnicode);
unicode 转化为汉字的方法:
- function toChineseWords(data) {
- if (data == '' || typeof data == 'undefined') return '请输入十六进制 unicode';
- data = data.split("\\u");
- var str = '';
- for (var i = 0; i < data.length; i++) {
- str += String.fromCharCode(parseInt(data[i], 16).toString(10));
- }
- return str;
- }
- var resultChineseWords = toChineseWords("\u4e2d\u56fd");
- console.log(resultChineseWords); // 中国
在网上找到另外一个实现方式:
- var GB2312UnicodeConverter = {
- ToUnicode: function(str) {
- return escape(str).toLocaleLowerCase().replace(/%u/gi, '\\u');
- },
- ToGB2312: function(str) {
- return unescape(str.replace(/\\u/gi, '%u'));
- }
- };
- var result = GB2312UnicodeConverter.ToUnicode('中国'); //\u4e2d\u56fd
- var result2 = GB2312UnicodeConverter.ToUnicode(result); //%5cu4e2d%5cu56fd
下面实现汉字转 Unicode 码:
- function toUnicode(s){
- return s.replace(/([\u4E00-\u9FA5]|[\uFE30-\uFFA0])/g,function(newStr){
- return "\\u" + newStr.charCodeAt(0).toString(16);
- });
- }
来源: https://www.cnblogs.com/moqiutao/p/7842832.html