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 相关文章推荐
自适应图片大小的弹出窗口
Jul 27 Javascript
jQuery 剧场版 你必须知道的javascript
May 27 Javascript
javascript从右边截取指定字符串的三种实现方法
Nov 29 Javascript
Javascript通过overflow控制列表闭合与展开的方法
May 15 Javascript
JavaScript数据类型转换的注意事项
Jul 31 Javascript
AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
Dec 12 Javascript
AngularJS1.X学习笔记2-数据绑定详解
Apr 01 Javascript
微信小程序教程系列之视图层的条件渲染(10)
Apr 19 Javascript
VueJs监听window.resize方法示例
Jan 17 Javascript
vue实现键盘输入支付密码功能
Aug 18 Javascript
vue 优化CDN加速的方法示例
Sep 19 Javascript
在antd Form表单中select设置初始值操作
Nov 02 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
php4的session功能评述(三)
2006/10/09 PHP
php 获取一个月第一天与最后一天的代码
2010/05/16 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
php实现网页端验证码功能
2017/07/11 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
2019/03/21 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
PHP 使用位运算实现四则运算的代码
2021/03/09 PHP
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
javascript中FOREACH数组方法使用示例
2016/03/01 Javascript
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
浅谈JS继承_借用构造函数 &amp; 组合式继承
2016/08/16 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
五步轻松实现JavaScript HTML时钟效果
2020/03/25 Javascript
详解JQuery基础动画操作
2019/04/12 jQuery
JQuery事件委托原理与用法实例分析
2019/05/13 jQuery
学习python (1)
2006/10/31 Python
Python处理CSV与List的转换方法
2018/04/19 Python
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
python协程之动态添加任务的方法
2019/02/19 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
2020/03/27 Python
python实例化对象的具体方法
2020/06/17 Python
CSS3 画基本图形,圆形、椭圆形、三角形等
2016/09/20 HTML / CSS
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
财务管理专业应届毕业生求职信
2013/09/22 职场文书
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
红色旅游心得体会
2014/09/03 职场文书
2014年业务工作总结
2014/11/17 职场文书
【HBU】数据库第四周 单表查询
2021/04/05 SQL Server
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技
javascript中Set、Map、WeakSet、WeakMap区别
2022/12/24 Javascript