js 编码转换 gb2312 和 utf8 互转的2种方法


Posted in Javascript onAugust 07, 2013

方法一:

function gb2utf8(data){ 
      var glbEncode = []; 
      gb2utf8_data = data; 
      execScript("gb2utf8_data = MidB(gb2utf8_data, 1)", "VBScript"); 
      var t=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2"); 
      t=t.split("@"); 
      var i=0,j=t.length,k; 
      while(++i<j) { 
         k=t[i].substring(0,4); 
         if(!glbEncode[k])  
         { 
            gb2utf8_char = eval("0x"+k); 
            execScript("gb2utf8_char = Chr(gb2utf8_char)", "VBScript"); 
            glbEncode[k]=escape(gb2utf8_char).substring(1,6); 
         } 
         t[i]=glbEncode[k]+t[i].substring(4); 
      } 
      gb2utf8_data = gb2utf8_char = null; 
      return unescape(t.join("%")); 
 } 
 

 使用时:xxx.innerHTML=gb2utf8(req.responseBody);
方法二:
<script language="JavaScript">
 <!--
 function utf8(wide) {
 var c, s;
 var enc = "";
 var i = 0;
 while(i<wide.length) {
 c= wide.charCodeAt(i++);
 // handle UTF-16 surrogates
 if (c>=0xDC00 && c<0xE000) continue;
 if (c>=0xD800 && c<0xDC00) {
 if (i>=wide.length) continue;
 s= wide.charCodeAt(i++);
 if (s<0xDC00 || c>=0xDE00) continue;
 c= ((c-0xD800)<<10)+(s-0xDC00)+0x10000;
 }
 // output value
 if (c<0x80) enc += String.fromCharCode(c);
 else if (c<0x800) enc += String.fromCharCode(0xC0+(c>>6),0x80+(c&0x3F));
 else if (c<0x10000) enc += String.fromCharCode(0xE0+(c>>12),0x80+(c>>6&0x3F),0x80+(c&0x3F));
 else enc += String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F),0x80+(c>>6&0x3F),0x80+(c&0x3F));
 }
 return enc;
 }
 var hexchars = "0123456789ABCDEF";
 function toHex(n) {
 return hexchars.charAt(n>>4)+hexchars.charAt(n & 0xF);
 }
 var okURIchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
 function encodeURIComponentNew(s) {
 var s = utf8(s);
 var c;
 var enc = "";
 for (var i= 0; i<s.length; i++) {
 if (okURIchars.indexOf(s.charAt(i))==-1)
 enc += "%"+toHex(s.charCodeAt(i));
 else
 enc += s.charAt(i);
 }
 return enc;
 }
 alert(encodeURIComponentNew("中文"))
 alert(decodeURIComponent(encodeURIComponentNew("中文")))
 // -->
 </script>
 

在java类中配合使用: (适用于ajax)
String dwp = new String(request.getParameter("dwp").getBytes("ISO-8859-1"),"gbk") ; 
String dwc = new String(request.getParameter("dwc").getBytes("ISO-8859-1"),"gbk") ;
Javascript 相关文章推荐
javaScript 利用闭包模拟对象的私有属性
Dec 29 Javascript
JQuery中使用Ajax赋值给全局变量异常的解决方法
Jan 10 Javascript
node.js入门教程
Jun 01 Javascript
老生常谈遮罩层 滚动条的问题
Apr 29 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
Jun 17 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
Nov 23 Javascript
jQuery实现点击关注和取消功能
Jul 03 jQuery
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
Dec 14 Javascript
vue权限路由实现的方法示例总结
Jul 29 Javascript
vue+element模态框中新增模态框和删除功能
Jun 11 Javascript
微信小程序实现下滑到底部自动翻页功能
Mar 07 Javascript
了不起的11个JavaScript代码重构最佳实践小结
Jan 11 Javascript
Javascript页面添加到收藏夹的简单方法
Aug 07 #Javascript
js判断浏览器类型的方法
Aug 07 #Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
Aug 07 #Javascript
图片上传判断及预览脚本的效果实例
Aug 07 #Javascript
Javascript alert消息换行的方法
Aug 07 #Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
Aug 06 #Javascript
javascript 获取模态窗口的滚动位置代码
Aug 06 #Javascript
You might like
php采集速度探究总结(原创)
2008/04/18 PHP
解读PHP中的垃圾回收机制
2015/08/10 PHP
Laravel timestamps 设置为unix时间戳的方法
2019/10/11 PHP
完整显示当前日期和时间的JS代码
2007/09/17 Javascript
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
Javascript 页面模板化很多人没有使用过的方法
2012/06/05 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
javascript实用方法总结
2015/02/06 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
2016/04/12 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
2017/04/14 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
vue-自定义组件传值的实例讲解
2018/09/18 Javascript
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
跟老齐学Python之开始真正编程
2014/09/12 Python
python基于ID3思想的决策树
2018/01/03 Python
删除python pandas.DataFrame 的多重index实例
2018/06/08 Python
Falsk 与 Django 过滤器的使用与区别详解
2019/06/04 Python
详解Pandas之容易让人混淆的行选择和列选择
2019/07/10 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
Python requests模块cookie实例解析
2020/04/14 Python
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
HTML5地理定位实例
2014/10/15 HTML / CSS
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
公务员培训自我鉴定
2013/09/19 职场文书
酒店服务与管理毕业生求职信
2013/11/02 职场文书
预备党员思想汇报范文
2014/01/11 职场文书
大四学生找工作的自荐信
2014/03/27 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
导游词之上海豫园
2019/10/24 职场文书
教你使用Python pypinyin库实现汉字转拼音
2021/05/27 Python