JavaScript实现GB2312与UTF-8编码互转的两种方法

作者:桌面漫游时间:2026-10-27 13:18:00浏览:408

本文介绍了在JavaScript中实现GB2312与UTF-8编码互转的两种具体方法。第一种方法利用IE特有的VBScript execScript函数处理字节流,适用于XMLHTTP响应体的编码转换;第二种方法通过手动解析UTF-16代理对并转换为UTF-8字节序列,实现字符串编码转换。文中还包含Java后端配合处理ISO-8859-1到GBK的示例代码,适用于Ajax场景下的编码兼容问题。

利用VBScript进行GB2312转UTF-8

方案一:


代码示例如下:

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);


纯JavaScript实现UTF-8编码转换

方案二:


代码示例如下:

<script language="JavaScript">
 <!--
function utf8(wide) {
var c, s;
var enc = "";
var i = 0;
while(i<wide.length) {
c= wide.charCodeAt(i++);
// 处理UTF-16代理对
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;
 }
// 输出编码值
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编码

在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") ;
作者最新文章