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.showModalDialog参数传递中含有特殊字符的处理方法
Jun 06 Javascript
JavaScript检查某个function是否是原生代码的方法
Aug 20 Javascript
javascript 操作符(~、&amp;、|、^、)使用案例
Dec 31 Javascript
深入理解JavaScript系列(34):设计模式之命令模式详解
Mar 03 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
Sep 26 Javascript
JavaScript事件 &quot;事件对象&quot;的注意要点
Jan 14 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
May 20 Javascript
js重写方法的简单实现
Jul 10 Javascript
AngularJS 服务详细讲解及示例代码
Aug 17 Javascript
捕获未处理的Promise错误方法
Oct 13 Javascript
vue中使用refs定位dom出现undefined的解决方法
Dec 21 Javascript
js实现图片上传到服务器和回显
Jan 19 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
我常用的几个类
2006/10/09 PHP
PHP基于数组实现的分页函数实例
2014/08/20 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
JQuery 学习笔记 选择器之六
2009/07/23 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
js替换字符串的所有示例代码
2013/07/23 Javascript
动态标签 悬停效果 延迟加载示例代码
2013/11/21 Javascript
简体中文转换繁体中文(实现代码)
2013/12/25 Javascript
Javascript中Array.prototype.map()详解
2014/10/22 Javascript
jquery中show()、hide()和toggle()用法实例
2015/01/15 Javascript
AngularJs Managing Service Dependencies详解
2016/09/02 Javascript
Node.js readline模块与util模块的使用
2018/03/01 Javascript
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
JS中的继承操作实例总结
2020/06/06 Javascript
vue+Element-ui实现登录注册表单
2020/11/17 Javascript
[05:53]敌法师的金色冠名ID"BurNIng",是传说,是荣耀
2020/07/11 DOTA
[05:23]DOTA2-DPC中国联赛2月1日Recap集锦
2021/03/11 DOTA
视觉直观感受若干常用排序算法
2017/04/13 Python
SVM基本概念及Python实现代码
2017/12/27 Python
python可视化篇之流式数据监控的实现
2019/08/07 Python
python编写计算器功能
2019/10/25 Python
Python实现加密接口测试方法步骤详解
2020/06/05 Python
Python中Selenium模块的使用详解
2020/10/09 Python
Farah官方网站:男士服装及配件
2019/11/01 全球购物
数据库方面面试题
2012/04/22 面试题
机械设备与数控技术专业求职信
2014/08/10 职场文书
合作协议书格式
2014/08/19 职场文书
竞选大学学委演讲稿
2014/09/13 职场文书
2014年国庆节寄语
2014/09/19 职场文书
工商局局长个人对照检查材料思想汇报
2014/09/23 职场文书
金融专业银行实习证明模板
2014/11/28 职场文书
小学生安全保证书
2015/05/09 职场文书
生日宴会家属答谢词
2015/09/29 职场文书
创业计划书介绍
2019/04/24 职场文书
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL