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 相关文章推荐
多浏览器支持的右下角浮动窗口
Apr 01 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
Jul 22 Javascript
javascript实现数字倒计时特效
Mar 30 Javascript
jQuery实现的简单拖拽功能示例
Sep 13 Javascript
leaflet的开发入门教程
Nov 17 Javascript
Bootstrap中data-target 到底是什么
Feb 14 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
Jun 12 Javascript
让axios发送表单请求形式的键值对post数据的实例
Aug 11 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
Mar 16 Javascript
微信小程序实现弹出菜单动画
Jun 21 Javascript
Nuxt v-bind绑定img src不显示的解决
Dec 05 Javascript
Node使用Nodemailer发送邮件的方法实现
Feb 24 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/05/29 PHP
PHP基础陷阱题(变量赋值)
2012/09/12 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
2019/10/24 PHP
学习YUI.Ext 第二天
2007/03/10 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
JavaScript中的prototype.bind()方法介绍
2014/04/04 Javascript
JavaScript实现获得所有兄弟节点的方法
2015/07/23 Javascript
JavaScript操作HTML元素和样式的方法详解
2015/10/21 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
javascript中BOM基础知识总结
2017/02/14 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
angularjs实现简单的购物车功能
2017/09/21 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
2018/02/03 Javascript
浅谈vue引用静态资源需要注意的事项
2018/09/28 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
vue实现列表拖拽排序的功能
2020/11/02 Javascript
python数据结构树和二叉树简介
2014/04/29 Python
Python中自定义函数的教程
2015/04/27 Python
使用Python &amp; Flask 实现RESTful Web API的实例
2017/09/19 Python
Python获取指定文件夹下的文件名的方法
2018/02/06 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
2018/07/25 Python
用Python画小女孩放风筝的示例
2019/11/23 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
2021/01/22 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
Kangol帽子官网:坎戈尔袋鼠
2018/09/26 全球购物
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
应届生污水处理求职信
2013/11/06 职场文书
原料仓仓管员岗位职责
2014/07/08 职场文书
机关作风建设剖析材料
2014/10/11 职场文书
业务员工作态度散漫检讨书
2014/11/02 职场文书
2014年招商引资工作总结
2014/11/22 职场文书
面试通知单大全
2015/04/20 职场文书
python中pandas对多列进行分组统计的实现
2021/06/18 Python
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js