revere_ 2016-05-16 09:54 采纳率: 0%
浏览 2730

utf16to8这个方法如何转gb2312

各位朋友,下面这个utf16to8的js方法,怎样将结果转为gb2312啊?
这是用js生成二维码的一个中文支持的方法。(http://www.cnblogs.com/pfbk/p/4848875.html就是这个),但现在只有国标的设备,只支持gb2312,所以要将utf8换成国标gb2312。

function utf16to8(str) {
var out, i, len, c;

out = "";
len = str.length;
for (i = 0; i < len; i++) {
    c = str.charCodeAt(i);
    if ((c >= 0x0001) && (c <= 0x007F)) {
        out += str.charAt(i);
    } else if (c > 0x07FF) {
        out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
        out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
        out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
    } else {
        out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
        out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
    }
}

return out;

}

  • 写回答

3条回答 默认 最新

  • oyljerry 2016-05-16 10:15
    关注
     //把编码转换成 gb2312编码
    function UrlEncode(str)
    {
     var i, c, ret="", strSpecial="!\"#$%&'()*+,/:;<=>?@[\]^`{|}~%";
     for(i = 0; i < str.length; i++)
     {
     //alert(str.charCodeAt(i));
    
     c = str.charAt(i);
     if(c==" ")
     ret+="+";
     else if(strSpecial.indexOf(c)!=-1)
     ret += "%" + str.charCodeAt(i).toString(16);
     if(z[str.charCodeAt(i)] != null)
     {
     d = z[str.charCodeAt(i)];
     try
     {
     ret += "%" + d.slice(0,2) + "%" + d.slice(-2);
     }
     catch (e)
     {
     alert(" $$ error name = " + e.name + ", message = " +e.message + ", d " + i + "= " + str.charCodeAt(i))
     }
     } //(jquery中文网 www.jquerycn.cn)
     else
     ret += c;
     }
     return ret;
     }
     function getSpell(str, sp)
     {
     var i, c, t, ret="";
     if(sp == null)
     sp="";
     for(i = 0; i < str.length; i++)
     {
     if(str.charCodeAt(i) >= 0x4e00)
     {
     c = parseInt(z[str.charCodeAt(i)], 16);
     if(c < 55290)
     {
     for(t = qswhSpell.length-1; t > 0; t = t - 2)
     if(qswhSpell[t] <= c)
     break;
     if(t > 0)
     ret += qswhSpell[t - 1] + sp;
     }
     }
     } a
     return ret.substr(0, ret.length-sp.length);
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料