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入门·图片对象(无刷新变换图片)\滚动图像
Oct 01 Javascript
jquery+json 通用三级联动下拉列表
Apr 19 Javascript
如何将JS的变量值传递给ASP变量
Dec 10 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
Jun 06 Javascript
javascript实现图片自动和可控的轮播切换特效
Apr 13 Javascript
基于JavaScript实现动态创建表格和增加表格行数
Dec 20 Javascript
AngularJs中route的使用方法和配置
Feb 04 Javascript
JS中动态创建元素的三种方法总结(推荐)
Oct 20 Javascript
Centos7 中 Node.js安装简单方法
Nov 02 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
Sep 10 Javascript
JS实现将对象转化为数组的方法分析
Jan 21 Javascript
三种方式清除vue路由跳转router-link的历史记录
Apr 10 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
神族 PROTOSS 概述
2020/03/14 星际争霸
php中用加号与用array_merge合并数组的区别深入分析
2013/06/03 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
php使用base64加密解密图片示例分享
2014/01/20 PHP
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
QQ邮箱的一个文本编辑器代码
2007/03/14 Javascript
分析 JavaScript 中令人困惑的变量赋值
2007/08/13 Javascript
js用图作提交按钮或超连接
2008/03/26 Javascript
Javascript读取cookie函数代码
2010/10/16 Javascript
Jquery中删除元素的实现代码
2011/12/29 Javascript
javascript日期格式化示例分享
2014/03/05 Javascript
js中通过父级进行查找定位元素
2014/06/15 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
bootstrap配合Masonry插件实现瀑布式布局
2017/01/18 Javascript
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
2018/07/03 jQuery
JavaScript实现的文本框placeholder提示文字功能示例
2018/07/25 Javascript
JS中注入eval, Function等系统函数截获动态代码
2019/04/03 Javascript
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
python pdb调试方法分享
2014/01/21 Python
常见的在Python中实现单例模式的三种方法
2015/04/08 Python
Python中不同进制的语法及转换方法分析
2016/07/27 Python
python中利用Future对象回调别的函数示例代码
2017/09/07 Python
Python+OpenCV人脸检测原理及示例详解
2020/10/19 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
Python字符串的一些操作方法总结
2019/06/10 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
TensorFlow 读取CSV数据的实例
2020/02/05 Python
如何基于python实现年会抽奖工具
2020/10/20 Python
一款纯css3实现简单的checkbox复选框和radio单选框
2014/11/05 HTML / CSS
两则小学生的自我评价分享
2013/11/14 职场文书
离婚协议书怎么写的
2014/12/14 职场文书
优秀班主任申报材料
2014/12/16 职场文书
教师节感想
2015/08/11 职场文书
Django项目如何获得SSL证书与配置HTTPS
2021/04/30 Python