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 相关文章推荐
新页面打开实际尺寸的图片
Aug 25 Javascript
NiftyCube——轻松实现圆角边框
Feb 20 Javascript
基于JQuery框架的AJAX实例代码
Nov 03 Javascript
图片延迟加载的实现代码(模仿懒惰)
Mar 29 Javascript
jquery实现从数组移除指定的值
Jun 24 Javascript
Angularjs注入拦截器实现Loading效果
Dec 28 Javascript
javascript实现起伏的水波背景效果
May 16 Javascript
javascript 中的console.log和弹出窗口alert
Aug 30 Javascript
jQuery实现html双向绑定功能示例
Oct 09 jQuery
2种在vue项目中使用百度地图的简单方法
Sep 28 Javascript
JS拖拽排序插件Sortable.js用法实例分析
Feb 20 Javascript
js HTML DOM EventListener功能与用法实例分析
Apr 27 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
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
Zend的MVC机制使用分析(一)
2013/05/02 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
PHP统计当前在线用户数实例讲解
2015/10/21 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
php生成txt文件实例代码介绍
2016/04/28 PHP
php生成word并下载代码实例
2019/03/15 PHP
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
javaScript 关闭浏览器 (不弹出提示框)
2010/01/31 Javascript
简单的JavaScript互斥锁分享
2014/02/02 Javascript
js 赋值包含单引号双引号问题的解决方法
2014/02/26 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
jQuery设置Easyui校验规则(推荐)
2016/11/21 Javascript
javascript基本数据类型和转换
2017/03/17 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
2017/05/08 jQuery
vue-axios使用详解
2017/05/10 Javascript
nodejs async异步常用函数总结(推荐)
2017/11/17 NodeJs
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
React 使用browserHistory项目访问404问题解决
2018/06/01 Javascript
使用gulp构建前端自动化的方法示例
2018/12/25 Javascript
vue实现菜单切换功能
2019/05/08 Javascript
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
2020/08/04 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
在Python的Django框架中更新数据库数据的方法
2015/07/17 Python
django框架自定义用户表操作示例
2018/08/07 Python
Python SMTP发送邮件遇到的一些问题及解决办法
2018/10/24 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
体育活动总结范文
2014/05/04 职场文书
临时租车协议范本
2014/09/23 职场文书
Python字典的基础操作
2021/11/01 Python
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
2022/06/01 Java/Android