字符串(含汉字)与十六进制互转js脚本-utf
来源:互联网 发布:网络溜溜球的意思 编辑:程序博客网 时间:2024/06/14 21:48
// http://www.jb51.net/article/87418.htm
var writeUTF = function (str, isGetBytes) {
var back = [];
var byteSize = 0;
for (var i = 0; i < str.length; i++) {
var code = str.charCodeAt(i);
if (0x00 <= code && code <= 0x7f) {
byteSize += 1;
back.push(code);
} else if (0x80 <= code && code <= 0x7ff) {
byteSize += 2;
back.push((192 | (31 & (code >> 6))));
back.push((128 | (63 & code)))
} else if ((0x800 <= code && code <= 0xd7ff)
|| (0xe000 <= code && code <= 0xffff)) {
byteSize += 3;
back.push((224 | (15 & (code >> 12))));
back.push((128 | (63 & (code >> 6))));
back.push((128 | (63 & code)))
}
}
for (i = 0; i < back.length; i++) {
back[i] &= 0xff;
}
if (isGetBytes) {
return back
}
if (byteSize <= 0xff) {
return [0, byteSize].concat(back);
} else {
return [byteSize >> 8, byteSize & 0xff].concat(back);
}
}
var readUTF = function (arr) {
if (typeof arr === 'string') {
return arr;
}
var UTF = '', _arr = arr;
for (var i = 0; i < _arr.length; i++) {
var one = _arr[i].toString(2),
v = one.match(/^1+?(?=0)/);
if (v && one.length == 8) {
var bytesLength = v[0].length;
var store = _arr[i].toString(2).slice(7 - bytesLength);
for (var st = 1; st < bytesLength; st++) {
store += _arr[st + i].toString(2).slice(2)
}
UTF += String.fromCharCode(parseInt(store, 2));
i += bytesLength - 1
} else {
UTF += String.fromCharCode(_arr[i])
}
}
return UTF
}
var toUTF8Hex = function(str){
var charBuf = writeUTF(str, true);
var re = '';
for(var i = 0; i < charBuf.length; i ++){
var x = (charBuf[i] & 0xFF).toString(16);
if(x.length === 1){
x = '0' + x;
}
re += x;
}
return re;
}
var utf8HexToStr = function (str) {
var buf = [];
for(var i = 0; i < str.length; i += 2){
buf.push(parseInt(str.substring(i, i+2), 16));
}
return readUTF(buf);
}
var writeUTF = function (str, isGetBytes) {
var back = [];
var byteSize = 0;
for (var i = 0; i < str.length; i++) {
var code = str.charCodeAt(i);
if (0x00 <= code && code <= 0x7f) {
byteSize += 1;
back.push(code);
} else if (0x80 <= code && code <= 0x7ff) {
byteSize += 2;
back.push((192 | (31 & (code >> 6))));
back.push((128 | (63 & code)))
} else if ((0x800 <= code && code <= 0xd7ff)
|| (0xe000 <= code && code <= 0xffff)) {
byteSize += 3;
back.push((224 | (15 & (code >> 12))));
back.push((128 | (63 & (code >> 6))));
back.push((128 | (63 & code)))
}
}
for (i = 0; i < back.length; i++) {
back[i] &= 0xff;
}
if (isGetBytes) {
return back
}
if (byteSize <= 0xff) {
return [0, byteSize].concat(back);
} else {
return [byteSize >> 8, byteSize & 0xff].concat(back);
}
}
var readUTF = function (arr) {
if (typeof arr === 'string') {
return arr;
}
var UTF = '', _arr = arr;
for (var i = 0; i < _arr.length; i++) {
var one = _arr[i].toString(2),
v = one.match(/^1+?(?=0)/);
if (v && one.length == 8) {
var bytesLength = v[0].length;
var store = _arr[i].toString(2).slice(7 - bytesLength);
for (var st = 1; st < bytesLength; st++) {
store += _arr[st + i].toString(2).slice(2)
}
UTF += String.fromCharCode(parseInt(store, 2));
i += bytesLength - 1
} else {
UTF += String.fromCharCode(_arr[i])
}
}
return UTF
}
var toUTF8Hex = function(str){
var charBuf = writeUTF(str, true);
var re = '';
for(var i = 0; i < charBuf.length; i ++){
var x = (charBuf[i] & 0xFF).toString(16);
if(x.length === 1){
x = '0' + x;
}
re += x;
}
return re;
}
var utf8HexToStr = function (str) {
var buf = [];
for(var i = 0; i < str.length; i += 2){
buf.push(parseInt(str.substring(i, i+2), 16));
}
return readUTF(buf);
}
阅读全文
0 0
- 字符串(含汉字)与十六进制互转js脚本-utf
- delphi汉字与十六进制内码互转
- 十六进制与字符串互转
- java的ascii(十六进制)与汉字互转
- C#代码段 -- 汉字与十六进制互转
- UIColor与十六进制字符串互转(整理)
- byte数组与十六进制字符串互转
- 十六进制与字符串之间互转
- 字符串与十六进制的互转
- float与十六进制字符串互转
- Js字符串与十六进制的相互转换
- Js字符串与十六进制的相互转换
- Js字符串与十六进制的相互转换
- Js字符串与十六进制的相互转换
- 汉字转十六进制 和十六进制转汉字
- VC里面如何拆分含汉字与字母的字符串
- java 汉字与UTF-8十六进制编码 间相互转换方法
- java 汉字与UTF-8十六进制编码 间相互转换方法
- docker 私服
- Linux环境编程主要头文件分析
- Win10使用附件中的远程桌面连接Ubuntu 16.04图形界面(xrdp方法)
- JAVA date类型处理的一些小知识
- 9-27 DAIRY
- 字符串(含汉字)与十六进制互转js脚本-utf
- 通过form的action属性提交表单并接收处理返回值的方法(页面不跳转)
- 嵌入式Linux开发,开源项目
- 大数据学习第2天----------------linux 安装mysql 出现安装依赖问题解决(centos7)
- Echars学习-动态隐藏扇形区域的文字描述。
- Tensorflow-常用函数
- 学习前端第二天--javascript入门
- 打开ftp服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹
- centos6.5虚拟机无法访问外网解决办法