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

来源:互联网 发布:手机图文转换软件 编辑:程序博客网 时间:2024/06/03 16:08

1、字符编码的原理

http://blog.csdn.net/xiaolei1021/article/details/52093706
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;    }

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;    }
原创粉丝点击