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及性能分析方法介绍
Mar 21 Javascript
JavaScript将数组转换成CSV格式的方法
Mar 19 Javascript
jQuery+html5实现div弹出层并遮罩背景
Apr 15 Javascript
Javascript编写俄罗斯方块思路及实例
Jul 07 Javascript
javascript实现拖放效果
Dec 16 Javascript
使用veloticy-ui生成文字动画效果
Feb 08 Javascript
react-native封装插件swiper的使用方法
Mar 20 Javascript
vue解决弹出蒙层滑动穿透问题的方法
Sep 22 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
Apr 06 Javascript
Json实现传值到后台代码实例
Jun 30 Javascript
JS绘图Flot如何实现动态可刷新曲线图
Oct 16 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
Nov 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
php学习之运算符相关概念
2011/06/09 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
THINKPHP截取中文字符串函数实例代码
2017/03/20 PHP
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
如何将网页表格内容导入excel
2014/02/18 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
AngularJS封装$http.post()实例详解
2017/05/06 Javascript
vue.js路由跳转详解
2017/08/28 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
2018/07/26 Javascript
微信小程序云开发之使用云函数
2019/05/17 Javascript
vue中实现Monaco Editor自定义提示功能
2019/07/05 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
Quasar Input:type=&quot;number&quot; 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
使用anaconda的pip安装第三方python包的操作步骤
2018/06/11 Python
python实现诗歌游戏(类继承)
2019/02/26 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
python Plotly绘图工具的简单使用
2020/03/03 Python
python 中不同包 类 方法 之间的调用详解
2020/03/09 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
pandas 数据类型转换的实现
2020/12/29 Python
梵蒂冈和罗马卡:Omnia Card Pass
2018/02/10 全球购物
美国最大的电子宠物训练产品制造商:PetSafe
2018/10/12 全球购物
怎么处理XML的中文问题
2015/03/26 面试题
销售实习自我鉴定
2013/12/07 职场文书
机电一体化专业求职信
2014/07/22 职场文书
讲党性心得体会
2014/09/03 职场文书
学位证书委托书
2014/09/30 职场文书
精神文明建设先进个人事迹材料
2014/12/24 职场文书
义诊活动总结
2015/02/04 职场文书
党员个人承诺书
2015/04/27 职场文书
2015入党自传格式范文
2015/06/26 职场文书
2016继续教育研修日志
2015/11/13 职场文书