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 常用操作代码
Mar 14 Javascript
Javascript的表单验证-揭开正则表达式的面纱
Mar 18 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
Aug 02 Javascript
jquery插入兄弟节点的操作方法
Dec 07 Javascript
Bootstrap进度条学习使用
Feb 09 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
Mar 09 Javascript
JavaScript面试技巧之数组的一些不low操作
Mar 22 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
Oct 26 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
Nov 14 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
Jul 14 Javascript
javascript前端和后台进行数据交互方法示例
Aug 07 Javascript
JavaScript高级程序设计之基本引用类型
Nov 17 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中快速生成随机密码的几种方式
2017/04/17 PHP
用JavaScript隐藏控件的方法
2009/09/21 Javascript
IE8下String的Trim()方法失效的解决方法
2013/11/08 Javascript
js动态删除div元素基本思路及实现代码
2014/05/08 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
2015/12/02 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
详解前后端分离之VueJS前端
2017/05/24 Javascript
MUI 实现侧滑菜单及其主体部分上下滑动的方法
2018/01/25 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
2018/09/29 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
详解mpvue开发微信小程序基础知识
2019/09/23 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
[00:59]DOTA2背景故事第二期之四大基本法则
2020/07/07 DOTA
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
用Python设计一个经典小游戏
2017/05/15 Python
python的paramiko模块实现远程控制和传输示例
2017/10/13 Python
python中的随机函数小结
2018/01/27 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
python多线程抽象编程模型详解
2019/03/20 Python
react+django清除浏览器缓存的几种方法小结
2019/07/17 Python
Python unittest基本使用方法代码实例
2020/06/29 Python
CSS3实现全景图特效示例代码
2018/03/26 HTML / CSS
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
汉森批发:Hansen Wholesale
2018/05/24 全球购物
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
公积金贷款承诺书
2015/04/30 职场文书
大学生实习证明
2015/06/16 职场文书
解决golang在import自己的包报错的问题
2021/04/29 Golang
如何用Navicat操作MySQL
2021/05/12 MySQL
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL