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技巧
Dec 06 Javascript
$.ajax返回的JSON无法执行success的解决方法
Sep 09 Javascript
jquery引用方法时传递参数原理分析
Oct 13 Javascript
判断字符串的长度(优化版)中文占两个字符
Oct 30 Javascript
Angular用来控制元素的展示与否的原生指令介绍
Jan 07 Javascript
js的toUpperCase方法用法实例
Jan 27 Javascript
js仿淘宝评价评分功能
Feb 28 Javascript
微信小程序微信支付接入开发实例详解
Apr 12 Javascript
微信小程序图片宽100%显示并且不变形
Jun 21 Javascript
把vue-router和express项目部署到服务器的方法
Feb 21 Javascript
详解Angular如何正确的操作DOM
Jul 06 Javascript
JavaScript组合设计模式--改进引入案例分析
May 23 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 isset()及empty()用法区别详解
2020/08/29 PHP
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
谷歌浏览器不支持showModalDialog模态对话框的解决方法
2014/09/22 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
JavaScript检测原始值、引用值、属性
2016/06/20 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
详解vuejs之v-for列表渲染
2017/06/22 Javascript
seajs中模块依赖的加载处理实例分析
2017/10/10 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
2017/12/24 Javascript
Vue中对比scoped css和css module的区别
2018/05/17 Javascript
解决bootstrap模态框数据缓存的问题方法
2018/08/10 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
Layui Form 自定义验证的实例代码
2019/09/14 Javascript
JS pushlet XMLAdapter适配器用法案例解析
2020/10/16 Javascript
[36:33]Ti4 循环赛第四日 附加赛NEWBEE vs Mouz
2014/07/13 DOTA
Python比较两个图片相似度的方法
2015/03/13 Python
使用Python脚本将Bing的每日图片作为桌面的教程
2015/05/04 Python
python的keyword模块用法实例分析
2015/06/30 Python
利用Python如何将数据写到CSV文件中
2018/06/05 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
2019/06/27 Python
django列表筛选功能的实现代码
2020/03/27 Python
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
JMS中Topic和Queue有什么区别
2013/05/15 面试题
医生自荐信
2013/10/11 职场文书
毕业生自荐书
2014/02/02 职场文书
会计专业自我鉴定
2014/02/10 职场文书
设备动力科岗位职责范本
2014/02/23 职场文书
市场拓展计划书
2014/05/03 职场文书
公共场所禁烟倡议书
2014/08/30 职场文书
农村文化建设标语
2014/10/07 职场文书
未婚证明书模板
2014/10/08 职场文书
2014年工人工作总结
2014/11/25 职场文书
2014年学校德育工作总结
2014/12/05 职场文书
英语通知范文
2015/04/22 职场文书
用python实现监控视频人数统计
2021/05/21 Python