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 相关文章推荐
JS的replace方法详细介绍
Nov 09 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
Mar 05 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
Nov 23 Javascript
JS实现可点击展开与关闭的左侧广告代码
Sep 02 Javascript
跟我学习javascript的函数调用和构造函数调用
Nov 16 Javascript
js闭包引起的事件注册问题介绍
Mar 29 Javascript
jQuery简单自定义图片轮播插件及用法示例
Nov 21 Javascript
Bootstrap导航条的使用和理解3
Dec 14 Javascript
angular过滤器实现排序功能
Jun 27 Javascript
Angular中使用better-scroll插件的方法
Mar 27 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
Jul 11 Javascript
React如何解决fetch跨域请求时session失效问题
Nov 02 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中对2个数组相加的函数
2011/06/24 PHP
无需重新编译php加入ftp扩展的解决方法
2013/02/07 PHP
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
微信支付开发教程(一)微信支付URL配置
2014/05/28 PHP
php使用pdo连接并查询sql数据库的方法
2014/12/24 PHP
php查询操作实现投票功能
2016/05/09 PHP
ExtJS GTGrid 简单用户管理
2009/07/01 Javascript
JS小功能(onmouseover实现选择月份)实例代码
2013/11/28 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
简化版手机端照片预览组件
2015/04/13 Javascript
canvas实现十二星座星空图
2017/02/14 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
js实现页面多个日期时间倒计时效果
2019/06/20 Javascript
微信小程序实现3D轮播图效果(非swiper组件)
2019/09/21 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
js、jquery实现列表模糊搜索功能过程解析
2020/03/27 jQuery
JS实现时间校验的代码
2020/05/25 Javascript
[02:16]DOTA2英雄基础教程 干扰者
2014/01/15 DOTA
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
初学Python实用技巧两则
2014/08/29 Python
详解如何使用Python编写vim插件
2017/11/28 Python
详解Python自建logging模块
2018/01/29 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
python 实现按对象传值
2019/12/26 Python
Python socket服务常用操作代码实例
2020/06/22 Python
python程序如何进行保存
2020/07/03 Python
CSS3中的clip-path使用攻略
2015/08/03 HTML / CSS
美国高端婴童品牌:Hanna Andersson
2016/10/30 全球购物
eharmony澳大利亚:网上约会服务
2020/02/29 全球购物
Shell编程面试题
2012/05/30 面试题
《春晓》教学反思
2014/04/20 职场文书
股东授权委托书
2014/10/15 职场文书
幼儿园教师自我评价
2015/03/04 职场文书
学生党支部工作总结2015
2015/05/26 职场文书