html js utf8编码转换器,JS编码转换GB2312和UTF8

这段代码实现了一个JavaScript函数,用于在GB2312和UTF8编码之间进行转换。它包含了从二进制到十进制,十六进制到UTF8,以及字符串到十六进制的转换方法。该函数可以用于处理中文字符在不同编码格式下的转换问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//JS编码转换GB2312和UTF8

function GB2312UTF8() {

this.Dig2Dec = function(s) {

var retV = 0;

if (s.length == 4) {

for (var i = 0; i < 4; i++) {

retV += eval(s.charAt(i)) * Math.pow(2, 3 – i);

}

return retV;

}

return – 1;

}

this.Hex2Utf8 = function(s) {

var retS = “”;

var tempS = “”;

var ss = “”;

if (s.length == 16) {

tempS = “1110” + s.substring(0, 4);

tempS += “10” + s.substring(4, 10);

tempS += “10” + s.substring(10, 16);

var sss = “0123456789ABCDEF”;

for (var i = 0; i < 3; i++) {

retS += “%”;

ss = tempS.substring(i * 8, (eval(i) + 1) * 8);

retS += sss.charAt(this.Dig2Dec(ss.substring(0, 4)));

retS += sss.charAt(this.Dig2Dec(ss.substring(4, 8)));

}

return retS;

}

return “”;

}

this.Dec2Dig = function(n1) {

var s = “”;

var n2 = 0;

for (var i = 0; i < 4; i++) {

n2 = Math.pow(2, 3 – i);

if (n1 >= n2) {

s += ‘1’;

n1 = n1 – n2;

} else s += ‘0’;

}

return s;

}

this.Str2Hex = function(s) {

var c = “”;

var n;

var ss = “0123456789ABCDEF”;

var digS = “”;

for (var i = 0; i < s.length; i++) {

c = s.charAt(i);

n = ss.indexOf(c);

digS += this.Dec2Dig(eval(n));

}

return digS;

}

this.Gb2312ToUtf8 = function(s1) {

var s = escape(s1);

var sa = s.split(“%”);

var retV = “”;

if (sa[0] != “”) {

retV = sa[0];

}

for (var i = 1; i < sa.length; i++) {

if (sa[i].substring(0, 1) == “u”) {

retV += this.Hex2Utf8(this.Str2Hex(sa[i].substring(1, 5)));

if (sa[i].length) {

retV += sa[i].substring(5);

}

} else {

retV += unescape(“%” + sa[i]);

if (sa[i].length) {

retV += sa[i].substring(5);

}

}

}

return retV;

}

this.Utf8ToGb2312 = function(str1) {

var substr = “”;

var a = “”;

var b = “”;

var c = “”;

var i = -1;

i = str1.indexOf(“%”);

if (i == -1) {

return str1;

}

while (i != -1) {

if (i < 3) {

substr = substr + str1.substr(0, i – 1);

str1 = str1.substr(i + 1, str1.length – i);

a = str1.substr(0, 2);

str1 = str1.substr(2, str1.length – 2);

if (parseInt(“0x” + a) & 0x80 == 0) {

substr = substr + String.fromCharCode(parseInt(“0x” + a));

} else if (parseInt(“0x” + a) & 0xE0 == 0xC0) { //two byte

b = str1.substr(1, 2);

str1 = str1.substr(3, str1.length – 3);

var widechar = (parseInt(“0x” + a) & 0x1F) << 6;

widechar = widechar | (parseInt(“0x” + b) & 0x3F);

substr = substr + String.fromCharCode(widechar);

}

else {

b = str1.substr(1, 2);

str1 = str1.substr(3, str1.length – 3);

c = str1.substr(1, 2);

str1 = str1.substr(3, str1.length – 3);

var widechar = (parseInt(“0x” + a) & 0x0F) << 12;

widechar = widechar | ((parseInt(“0x” + b) & 0x3F) << 6);

widechar = widechar | (parseInt(“0x” + c) & 0x3F);

substr = substr + String.fromCharCode(widechar);

}

} else {

substr = substr + str1.substring(0, i);

str1 = str1.substring(i);

}

i = str1.indexOf(“%”);

}

return substr + str1;

}

}

调用方法:

if($.browser.msie) {

var newtrans=new GB2312UTF8();

var content=newtrans.Utf8ToGb2312(content);

}

var xx=new GB2312UTF8();

//GB2312转UTF8

var Utf8=xx.Gb2312ToUtf8(“你aaa好aaaaa”);

//UTF8到gb2312转换

var Gb2312=xx.Utf8ToGb2312(Utf8);

alert(Gb2312);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值