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 相关文章推荐
jquery 实现窗口的最大化不论什么情况
Sep 03 Javascript
js获取对象为null的解决方法
Nov 21 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
Sep 20 Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
Mar 01 Javascript
微信小程序 wx:for的使用实例详解
Apr 27 Javascript
vue2.0 资源文件assets和static的区别详解
Apr 08 Javascript
vue axios数据请求及vue中使用axios的方法
Sep 10 Javascript
Vuex 单状态库与多模块状态库详解
Dec 11 Javascript
node.js express框架实现文件上传与下载功能实例详解
Oct 15 Javascript
js实现聊天对话框
Feb 08 Javascript
Vue如何跨组件传递Slot的实现
Dec 14 Vue.js
JavaScript实现滑块验证解锁
Jan 07 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
MySQL数据源表结构图示
2008/06/05 PHP
php5.3 废弃函数小结
2010/05/16 PHP
用PHP生成excel文件到指定目录
2015/06/22 PHP
可以文本显示的公告栏的js代码
2007/03/11 Javascript
通用JS事件写法实现代码
2009/01/07 Javascript
ajax中get和post的说明及使用与区别
2012/12/23 Javascript
nodejs教程 安装express及配置app.js文件的详细步骤
2013/05/11 NodeJs
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
2016/06/16 Javascript
jQuery可见性过滤选择器用法示例
2016/09/09 Javascript
js实现碰撞检测特效代码分享
2016/10/16 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
探讨Vue.js的组件和模板
2017/10/27 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
python批量导出导入MySQL用户的方法
2013/11/15 Python
python学习手册中的python多态示例代码
2014/01/21 Python
部署Python的框架下的web app的详细教程
2015/04/30 Python
Android应用开发中Action bar编写的入门教程
2016/02/26 Python
Python读取图片属性信息的实现方法
2016/09/11 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
导入tensorflow时报错:cannot import name 'abs'的解决
2019/10/10 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
开发人员所需要知道的HTML5性能分析面面观
2012/07/05 HTML / CSS
html5指南-2.如何操作document metadata
2013/01/07 HTML / CSS
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
what is the difference between ext2 and ext3
2013/11/03 面试题
小学英语教学反思案例
2014/02/04 职场文书
会议主持词
2014/03/17 职场文书
节水口号标语
2014/06/19 职场文书
元旦标语大全
2014/10/09 职场文书