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跨浏览器显示的file上传控件
Oct 24 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
Jun 08 Javascript
JavaScript实现向右伸出的多级网页菜单效果
Aug 25 Javascript
浅谈node.js中async异步编程
Oct 22 Javascript
基于Bootstrap实现tab标签切换效果
Apr 15 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
Aug 25 Javascript
js实现前端图片上传即时预览功能
Aug 02 Javascript
在vue中使用vue-echarts-v3的实例代码
Sep 13 Javascript
vue-cli项目修改文件热重载失效的解决方法
Sep 19 Javascript
vue列表单项展开收缩功能之this.$refs的详解
May 05 Javascript
关于引入vue.js 文件的知识点总结
Jan 28 Javascript
vue中对象数组去重的实现
Feb 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/01/13 PHP
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
2012/06/27 PHP
PHP htmlspecialchars_decode()函数用法讲解
2019/03/01 PHP
JS删除数组元素的函数介绍
2013/03/27 Javascript
javascript设计模式之工厂模式示例讲解
2014/03/04 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
JS清除选择内容的方法
2015/01/29 Javascript
使用window.prompt()实现弹出用户输入的对话框
2015/04/13 Javascript
JS实现超简单的鼠标拖动效果
2015/11/02 Javascript
jQuery实现网页顶部固定导航效果代码
2015/12/24 Javascript
JS &amp; JQuery 动态添加 select option
2016/06/08 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
javascript数组去重方法分析
2016/12/15 Javascript
微信小程序 swiper制作tab切换实现附源码
2017/01/21 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
2018/01/25 jQuery
VUE.js实现动态设置输入框disabled属性
2019/10/28 Javascript
使用Python的PIL模块来进行图片对比
2016/02/18 Python
Python中不同进制的语法及转换方法分析
2016/07/27 Python
Flask框架的学习指南之开发环境搭建
2016/11/20 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
2019/04/01 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
Python基于pandas爬取网页表格数据
2020/05/11 Python
携程旅行网:中国领先的在线旅行服务公司
2017/02/17 全球购物
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
阿拉伯书店:Jamalon
2019/07/24 全球购物
应用艺术毕业生的自我评价
2013/12/04 职场文书
八年级语文教学反思
2014/02/11 职场文书
上课打牌的检讨书
2014/02/15 职场文书
体育教师个人的自我评价
2014/02/16 职场文书
拉拉队口号
2014/06/16 职场文书
书法兴趣小组活动总结
2014/07/07 职场文书
送给客户微信问候语!
2019/07/04 职场文书
Java SSM配置文件案例详解
2021/08/30 Java/Android