JS中UTF-8和UTF-16互转
1.由于服务端使用的Go,默认是使用UTF-8编码的,而JS默认是Unicode编码的(也就是UTF-16),所以为了字符串编码的一致性,将前端字符串数据编码转换为UTF-8之后再发送给服务端,服务端发送过来的字符串数据转换回UTF-16再使用。
PS:关于编码可参考《关于编码:Unicode/UTF-8/UTF-16/UTF-32》
2.UTF-16转UTF-8
var utf16ToUtf8 = function (utf16Str) {
var utf8Arr = [];
var byteSize = 0;
for (var i = 0; i < utf16Str.length; i++) {
//获取字符Unicode码值
var code = utf16Str.charCodeAt(i);
//如果码值是1个字节的范围,则直接写入
if (code >= 0x00 && code <= 0x7f) {
byteSize += 1;
utf8Arr.push(code);
//如果码值是2个字节以上的范围,则按规则进行填充补码转换
} else if (code >= 0x80 && code <= 0x7ff) {
byteSize += 2;
utf8Arr.push((192 | (31 & (code >> 6))));
utf8Arr.push((128 | (63 & code)))
} else if ((code >= 0x800 && code <= 0xd7ff)
|| (code >= 0xe000 && code <= 0xffff)) {
byteSize += 3;
utf8Arr.push((224 | (15 & (code >> 12))));
utf8Arr.push((128 | (63 & (code >> 6))));
utf8Arr.push((128 | (63 & code)))
} else if(code >= 0x10000 && code <= 0x10ffff ){
byteSize += 4;
utf8Arr.push((240 | (7 & (code >> 18))));
utf8Arr.push((128 | (63 & (code >> 12))));
utf8Arr.push((128 | (63 & (code >> 6))));
utf8Arr.push((128 | (63 & code)))
}
}
return utf8Arr
}
3.UTF-8转UTF-16
var utf8ToUtf16 = function (utf8Arr) {
var utf16Str = '';
for (var i = 0; i < utf8Arr.length; i++) {
//每个字节都转换为2进制字符串进行判断
var one = utf8Arr[i].toString(2);
//正则表达式判断该字节是否符合>=2个1和1个0的情况
var v = one.match(/^1+?(?=0)/);
//多个字节编码
if (v && one.length == 8) {
//获取该编码是多少个字节长度
var bytesLength = v[0].length;
//首个字节中的数据,因为首字节有效数据长度为8位减去1个0位,再减去bytesLength位的剩余位数
var store = utf8Arr[i].toString(2).slice(7 - bytesLength);
for (var st = 1; st < bytesLength; st++) {
//后面剩余字节中的数据,因为后面字节都是10xxxxxxx,所以slice中的2指的是去除10
store += utf8Arr[st + i].toString(2).slice(2)
}
//转换为Unicode码值
utf16Str += String.fromCharCode(parseInt(store, 2));
//调整剩余字节数
i += bytesLength - 1
} else {
//单个字节编码,和Unicode码值一致,直接将该字节转换为UTF-16
utf16Str += String.fromCharCode(utf8Arr[i])
}
}
return utf16Str
}
参考网址:《通过javascript进行UTF-8编码的实现方法》
以上。
JS中UTF-8和UTF-16互转的更多相关文章
- js中Json字符串如何转成Json对象(4种转换方式)
js中Json字符串如何转成Json对象(4种转换方式) 一.总结 一句话总结:原生方法(就是浏览器默认支持的方法) 浏览器支持的转换方式(Firefox,chrome,opera,safari,ie ...
- jsp中pageEncoding、charset=UTF -8
jsp中pageEncoding.charset=UTF -8" 在JSP/Servlet 中主要有以下几个地方可以设置编码,pageEncoding="UTF-8". ...
- java 乱码详解_jsp中pageEncoding、charset=UTF -8"、request.setCharacterEncoding("UTF-8")
http://blog.csdn.net/qinysong/article/details/1179480 java 乱码详解__jsp中pageEncoding.charset=UTF -8&quo ...
- 如何在 JS 中嵌入大量 HTML 代码 --更新2017-10-10 16:37:09
一.一般方式 方式1:\ 要写在标签后面,看例子 var longString = "\ ------------------------\ ------------------------ ...
- json--pyton中obj与json的互转,js中obj与json的互转
json 解释:json是一种跨平台的通用的数据格式 python中对象(obj)与json之间的相互转换 1.对象(obj)转json格式的字符串 json.dumps(res) res = () ...
- JS中,JSON 和 对象互转,数组和字符串的转换?
JSON 与 J对象转化 要实现从对象转换为 JSON 字符串,使用 JSON.stringify() 方法: 如下: var json = JSON.stringify({a: 'Hello', b ...
- JS中URL编码参数(UrlEncode)
JS中URL编码参数(UrlEncode) 网上有很多文字作品写涉及在JS中呈现类似UrlEncode功能时都是自定义参数来呈现,其实JS中本身就有那样的参数.参数parameter由于用类似URL的 ...
- 在Node.js中操作文件系统(一)
在Node.js中操作文件系统 在Node.js中,使用fs模块来实现所有有关文件及目录的创建,写入及删除操作.在fs模块中,所有对文件及目录的操作都可以使用同步与异步这两种方法.比如在执行读文件操作 ...
- 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查
Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect),.它当前支持M ...
- js中的位运算
按位运算符是把操作数看作一系列单独的位,而不是一个数字值.所以在这之前,不得不提到什么是"位": 数值或字符在内存内都是被存储为0和 1的序列,每个0和1被称之为1个位,比如说10 ...
随机推荐
- WEB后台认证机制
mark to :http://www.cnblogs.com/xiekeli/p/5607107.html HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API ...
- Ubuntu 部署 nginx
Ubuntu 部署 nginx apt-get install nginx
- Kali系列之hydra ssh密码爆破
环境 kali 192.168.137.131 靶机 192.168.137.133 语句 hydra -l root -P /home/chenglee/zidian/wordlist.TXT -t ...
- python3 logging模块
很多程序都有记录日志的需求,并且日志包含的信息有正常的程序访问日志还可能有错误,警告等信息输出,python的logging模块提供了标准的日志接口,可以通过它存储各种格式的日志,日志级别等级:cri ...
- android 去掉主题
1 可以在xml中配置2.0之后 <application android:allowBackup="true" android:icon="@drawable ...
- Oracle使用——Oracle表空间处理
创建表空间 查看表空间信息(名称.大小) select t1.name tablespace_name ,t2.name file_local ,t2.bytes / (1024 * 1024) f ...
- Python logging 模块学习
logging example Level When it's used Numeric value DEBUG Detailed information, typically of interest ...
- LuoguP2257 YY的GCD
题目描述 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 kAc这种傻×必然不会了,于 ...
- HDU 4656 Evaluation(MTT)
题意 \(x_k=bc^{2k}+d\) \(\displaystyle F(x)=\sum_{i=0}^{n-1}a_ix^i\) 给定 \(\{a\},b,c,d,n\) ,求 \(F(x_0), ...
- Console的9种用法
Console的9种用法,1.显示信息的命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!DOCTYPE html> <html> <he ...