js解决汉字乱码问题(加码,解码)

///字符串加码
function encode(strIn)
{if(strIn ==undefined)return "";
var intLen=strIn.length;
var strOut="";
var strTemp;
var strFlag="";
for(var i=0;i<intLen;i++){
strTemp=strIn.charCodeAt(i);
if (strTemp>255 || strTemp<0){
if (strFlag==""){strFlag="#";
strOut=strOut+"[#"+fillLeftWithZero(strTemp.toString(16),4);
}
else if (strFlag=="~"){
strFlag="#";
strOut=strOut+"#"+fillLeftWithZero(strTemp.toString(16),4);
}
else if (strFlag=="#"){
strOut=strOut+fillLeftWithZero(strTemp.toString(16),4);
}
}
else{
if (strTemp < 48 || (strTemp > 57 && strTemp < 65) || (strTemp > 90 && strTemp < 97) || strTemp > 122){
if (strFlag==""){
strFlag="~";
strOut=strOut+"[~"+fillLeftWithZero(strTemp.toString(16),2);
}
else if (strFlag=="#"){
strFlag="~";
strOut=strOut+"~"+fillLeftWithZero(strTemp.toString(16),2);
}
else if (strFlag=="~"){
strOut=strOut+fillLeftWithZero(strTemp.toString(16),2);
}
}
else{
if (strFlag=="#" || strFlag=="~"){
strFlag="";
strOut=strOut+"]"+strIn.charAt(i);
}
else{
strOut=strOut+strIn.charAt(i);
}
}
}
}
return (strOut);
}


/字符串解码
function decode(strIn)
{
if(strIn ==undefined)
return "";

var intLen=strIn.length;
var strOut="";
var strTemp;
var strFlag="";

for(var i=0;i<intLen;i++)
{
strTemp=strIn.charAt(i);

if (strTemp=="["){
i++;
strTemp=strIn.charAt(i);
}
if (strTemp=="]"){
strFlag="";
continue;
}
if (strTemp=="~"){
i++;
strFlag="~";
}
if (strTemp=="#"){
i++;
strFlag="#";
}
switch (strFlag){
case "~":{
strTemp=strIn.substring(i,i+2);
strTemp=parseInt(strTemp,16);
strTemp=String.fromCharCode(strTemp);
strOut=strOut+strTemp;
i++;
break;
}
case "#":{
strTemp=strIn.substring(i,i+4);
if (strTemp.toUpperCase()=="FFFF"){
i+=4;
strTemp=strIn.substring(i,i+4);
}
strTemp=parseInt(strTemp,16);
strTemp=String.fromCharCode(strTemp);
strOut=strOut+strTemp;
i+=3;
break;
}
case "":{
strOut=strOut+strTemp;
break;
}
}
}
return (strOut);
}

/根据长度右边添加0
function fillLeftWithZero(strIn, outLen){
if (typeof(strIn)!="string") return strIn;

for (var i=strIn.length;i<outLen;i++)
strIn="0"+strIn;

return strIn;
}

主要针对用汉字作参数时解决乱码问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值