// UCS-2和UTF8都是unicode的一种编码方式
// js代码中使用的是UCS-2编码
1、 // UCS-2和UTF8都是unicode的一种编码方式
// js代码中使用的是UCS-2编码
js的编码方式
2、
这里写图片描述
3、str2utf8:
1)字符转USC-2,用charCodeAt()
2)如英文的话,直接返回字符str.charAt(i);//返回指定位置的字符
3)如中文的话,根据Unicode、utf-8编码方式的编码规则图,用String.fromCharCode转换
UCS-2转UTF-8
function str2utf8(str)
{
// UCS-2和UTF8都是unicode的一种编码方式
// js代码中使用的是UCS-2编码
var code;
var utf = "";
for (var i = 0; i < str.length; i++)
{
code = str.charCodeAt(i);//返回每个字符的Unicode 编码
if (code < 0x0080) {
utf += str.charAt(i);//返回指定位置的字符
}
else if (code < 0x0800) {
utf += String.fromCharCode(0xC0 | ((code >> 6) & 0x1F));
utf += String.fromCharCode(0x80 | ((code >> 0) & 0x3F));
}
else if (code < 0x10000) {
utf += String.fromCharCode(0xE0 | ((code >> 12) & 0x0F));
utf += String.fromCharCode(0x80 | ((code >> 6) & 0x3F));
utf += String.fromCharCode(0x80 | ((code >> 0) & 0x3F));
}
else
{
throw "不是UCS-2字符集"
}
}
return utf;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
4、utf82str:UTF-8转USC-2
function utf82str(utf)
{
var str = "";
var tmp;
for(var i = 0; i < utf.length; i++)
{
// 英文字符集合
if(utf.charCodeAt(i) >> 7 == 0x00)
{
str += utf.charAt(i);
continue;
}
// 其他字符集
else if(utf.charCodeAt(i) >> 5 == 0x06)
{
tmp = ((utf.charCodeAt(i + 0) & 0x1f) << 6) |
((utf.charCodeAt(i + 1) & 0x3f) << 0);
str += String.fromCharCode(tmp);
i++;
continue;
}
// 中文字符集
else if(utf.charCodeAt(i) >> 4 == 0x0e)
{
tmp = ((utf.charCodeAt(i + 0) & 0x0f) << 12) |
((utf.charCodeAt(i + 1) & 0x3f) << 6) |
((utf.charCodeAt(i + 2) & 0x3f) << 0);
str += String.fromCharCode(tmp);
i += 2;
continue;
}
// 其他字符集
else if(utf.charCodeAt(i) >> 3 == 0x1f)
{
tmp = ((utf.charCodeAt(i + 0) & 0x07) << 18) |
((utf.charCodeAt(i + 1) & 0x3f) << 12) |
((utf.charCodeAt(i + 2) & 0x3f) << 6);
((utf.charCodeAt(i + 3) & 0x3f) << 0);
str += String.fromCharCode(tmp);
i += 3;
continue;
}
// 非法字符集
else
{
throw "不是UTF-8字符集"
}
}
return str;
}
原文:https://blog.csdn.net/jiajia199470/article/details/77101297