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 相关文章推荐
window.ActiveXObject使用说明
Nov 08 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
Jun 20 Javascript
js贪吃蛇网页版游戏特效代码分享(挑战十关)
Aug 24 Javascript
JavaScript编写九九乘法表(两种任选)
Feb 04 Javascript
详解vue2父组件传递props异步数据到子组件的问题
Jun 29 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
Jul 10 Javascript
详解Node项目部署到云服务器上
Jul 12 Javascript
Vue实现6位数密码效果
Aug 18 Javascript
Vue项目引进ElementUI组件的方法
Nov 11 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
Jul 29 Javascript
详解vue的双向绑定原理及实现
May 05 Javascript
Vue操作Storage本地化存储
Apr 29 Vue.js
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 和 XML: 使用expat函数(三)
2006/10/09 PHP
php面向对象的方法重载两种版本比较
2008/09/08 PHP
JS 网站性能优化笔记
2011/05/24 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
php 可变函数使用小结
2018/06/12 PHP
php实现JWT验证的实例教程
2020/11/26 PHP
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
javascript实时显示北京时间的方法
2015/03/12 Javascript
使用jspdf生成pdf报表
2015/07/03 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
2015/09/23 Javascript
浅谈JavaScript的内置对象和浏览器对象
2016/06/03 Javascript
Javascript中call,apply,bind方法的详解与总结
2016/12/12 Javascript
快速入门Vue
2016/12/19 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
2017/01/22 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
学习使用Bootstrap栅格系统
2017/05/11 Javascript
vue2路由基本用法实例分析
2020/03/06 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
python连接sql server乱码的解决方法
2013/01/28 Python
举例详解Python中yield生成器的用法
2015/08/05 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
浅析python递归函数和河内塔问题
2017/04/18 Python
CentOS7安装Python3的教程详解
2019/04/10 Python
python使用多线程编写tcp客户端程序
2019/09/02 Python
Python hmac模块使用实例解析
2019/12/24 Python
python datetime时间格式的相互转换问题
2020/06/11 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
python+flask编写一个简单的登录接口
2020/11/13 Python
交警个人先进事迹材料
2014/05/11 职场文书
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers
Python中非常使用的6种基本变量的操作与技巧
2022/03/22 Python
生命的关键成分来自太空?陨石说是的
2022/04/29 数码科技