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 实现子父窗体互相传值的简单实例
Feb 17 Javascript
JQuery中serialize()、serializeArray()和param()方法示例介绍
Jul 31 Javascript
javascript中动态函数用法实例分析
May 14 Javascript
js select实现省市区联动选择
Apr 17 Javascript
JavaScript仿百度图片浏览效果
Nov 23 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
Mar 07 Javascript
浅谈JavaScript find 方法不支持IE的问题
Sep 28 Javascript
vue-router实现组件间的跳转(参数传递)
Nov 07 Javascript
web前端页面生成exe可执行文件的方法
Feb 08 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
May 07 Javascript
微信小程序 setData 对 data数据影响问题
Apr 18 Javascript
Vue响应式原理Observer、Dep、Watcher理解
Jun 06 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
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
多php服务器实现多session并发运行
2006/10/09 PHP
php切割页面div内容的实现代码分享
2012/07/31 PHP
php生成圆角图片的方法
2015/04/07 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
2016/11/09 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
用Juery网页选项卡实现代码
2011/06/13 Javascript
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
jQuery统计指定子元素数量的方法
2015/03/17 Javascript
Angular学习笔记之angular的$filter服务浅析
2016/11/12 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
2017/01/18 Javascript
vuejs如何配置less
2017/04/25 Javascript
React组件中的this的具体使用
2018/02/28 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
vue 返回上一页,页面样式错乱的解决
2019/11/14 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
2020/02/09 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
2020/08/04 Javascript
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
[55:25]2018DOTA2亚洲邀请赛3月29日 小组赛A组 VG VS OG
2018/03/30 DOTA
Django压缩静态文件的实现方法详析
2018/08/26 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
JINS眼镜官方网站:日本最大的眼镜邮购
2016/10/14 全球购物
世界上最大的巴士旅游观光公司:Big Bus Tours
2016/10/20 全球购物
彪马美国官网:PUMA美国
2017/03/09 全球购物
请介绍一下Ant
2016/07/22 面试题
房地产出纳岗位职责
2013/12/01 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
我的中国心演讲稿
2014/09/04 职场文书
个人催款函范文
2015/06/24 职场文书
消夏晚会主持词
2015/06/30 职场文书