js ---str转utf8与utf-8转str

时间:2022-10-21 17:28:59

1、字符编码的原理

http://blog.csdn.net/xiaolei1021/article/details/52093706
1、 // UCS-2和UTF8都是unicode的一种编码方式
// js代码中使用的是UCS-2编码
js ---str转utf8与utf-8转str

2、
js ---str转utf8与utf-8转str

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;
}

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;
}