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 相关文章推荐
jQuery1.6 类型判断实现代码
Sep 01 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
Mar 08 Javascript
六款帮助你实现惊艳视差滚动效果的jQuery插件
Sep 14 Javascript
用JavaScript实现使用鼠标画线的示例代码
Aug 19 Javascript
js实现的光标位置工具函数示例
Oct 03 Javascript
jQueryUI Datepicker组件设置日期高亮
Oct 13 Javascript
Angualrjs和bootstrap相结合实现数据表格table
Mar 30 Javascript
js实现多张图片延迟加载效果
Jul 17 Javascript
vue 解决循环引用组件报错的问题
Sep 06 Javascript
原生js实现商品筛选功能
Oct 28 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
Sep 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 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
php以post形式发送xml的方法
2014/11/04 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
因str_replace导致的注入问题总结
2019/08/08 PHP
网页中CDATA标记的说明
2010/09/12 Javascript
商城常用滚动的焦点图效果代码简单实用
2013/03/28 Javascript
JS 跳转页面延迟2种方法
2013/03/29 Javascript
javascript读取xml实现javascript分页
2013/12/13 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
点击标签切换和自动切换DIV选项卡
2014/08/10 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
2015/12/02 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
jQuery Chart图表制作组件Highcharts用法详解
2016/06/01 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
2016/09/17 Javascript
Angular.JS学习之依赖注入$injector详析
2016/10/20 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
微信小程序request出现400的问题解决办法
2017/05/23 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
React实现类似淘宝tab居中切换效果的示例代码
2020/06/02 Javascript
python编写分类决策树的代码
2017/12/21 Python
python爬虫之urllib3的使用示例
2018/07/09 Python
python中的字符串内部换行方法
2018/07/19 Python
Python批量查询关键词微信指数实例方法
2019/06/27 Python
pybind11和numpy进行交互的方法
2019/07/04 Python
python实现将一维列表转换为多维列表(numpy+reshape)
2019/11/29 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
绘儿乐产品官方在线商店:Crayola.com
2019/09/07 全球购物
党员公开承诺书范文
2014/03/25 职场文书
高中教师评语大全
2014/04/25 职场文书
销售顾问工作计划书
2014/09/15 职场文书
拾金不昧表扬稿大全
2015/05/05 职场文书