解码UTF-8之JS

2017-01-13 10:48:05来源:segmentfault作者:pinglikethinking人点击

JS的任何字符串操作之前都将会转义。so会看到如下:



JS无法捕获反斜杠,所以输入限制为输入/xe6


1 function utf8Decode(str){
2 var b=[],
3 arr=str.replace(///x/g," ").split(" ");
4 arr.shift();
5
6 var i=0,
7 j=0,
8 length=arr.length;
9 while(i<length){
10arr[i]=parseInt(arr[i],16).toString("2");
11if(arr[i].length<=7){
12b.push(parseInt(arr[i],2));
14}else{
15j=0;
16while(j<8){
17if(arr[i].charAt(j)==='1'){
18j++;
19}else{
20break;
21}
22}
23
24//已经判断出首个字节前连续几个1
25//判断出几个字节表示的字符
26if(j===2){
27b.push(parseInt(arr[i].slice(3)+parseInt(arr[++i],16).toString("2").slice(2),2));
28}else if(j===3){
29b.push(parseInt(arr[i].slice(4)+parseInt(arr[++i],16).toString("2").slice(2)+parseInt(arr[++i],16).toString("2").slice(2),2));
30}else{
31b.push(parseInt(arr[i].slice(5)+parseInt(arr[++i],16).toString("2").slice(2)+parseInt(arr[++i],16).toString("2").slice(2)+parseInt(arr[++i],16).toString("2").slice(2),2));
33}
i++;
34}
35 }
36
37 return b;
38
39 }

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台