JS中文字符串和UTF-8编码字符串相互转换

1.中文字符串转化为UTF-8编码,如“<汉字>”的UTF-8编码为“%3C%E6%B1%89%E5%AD%97%3E”
2.UTF-8编码字符串“%E6%B1%89%E5%AD%97”的中文为“<汉字>”


<script language="javascript" type="text/javascript">
//字符转换为UTF-8编码
function EncodeUtf8(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 += Hex2Utf8(Str2Hex(sa[i].substring(1,5)));
              
           }
           else retV += "%" + sa[i];
      }
     
      return retV;
}
function Str2Hex(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 += Dec2Dig(eval(n));
          
      }
      //return value;
      return digS;
}
function Dec2Dig(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;
     
}
function Dig2Dec(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;
}
function Hex2Utf8(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(Dig2Dec(ss.substring(0,4)));
            retS += sss.charAt(Dig2Dec(ss.substring(4,8)));
         }
         return retS;
     }
     return "";


var test = EncodeUtf8("中国");
alert("中国-----"+test);
</script>
    <script language="JavaScript">
//字符串替换函数,全部替换
function strReplaceAll(str,oldStr,newStr){
    var regS = new RegExp(oldStr,"gi");
    newStr = str.replace(regS,newStr);
    return newStr;   
}
</script>

<script> 
   //UTF-8编码的汉字转换为字符,特殊字符未处理,
function   chineseFromUtf8Url(strUtf8)    

var   bstr   =   ""; 
var   nOffset   =   0; //   processing   point   on   strUtf8 
   
if(   strUtf8   ==   ""   ) 
      return   ""; 
   
strUtf8   =   strUtf8.toLowerCase(); 
nOffset   =   strUtf8.indexOf("%e"); 
if(   nOffset   ==   -1   ) 
      return   strUtf8; 
       
while(   nOffset   !=   -1   ) 

      bstr   +=   strUtf8.substr(0,   nOffset); 
      strUtf8   =   strUtf8.substr(nOffset,   strUtf8.length   -   nOffset); 
      if(   strUtf8   ==   ""   ||   strUtf8.length   <   9   )       //   bad   string 
          return   bstr; 
       
      bstr   +=   utf8CodeToChineseChar(strUtf8.substr(0,   9)); 
      strUtf8   =   strUtf8.substr(9,   strUtf8.length   -   9); 
      nOffset   =   strUtf8.indexOf("%e"); 

   
return   bstr   +   strUtf8; 

   
function   unicodeFromUtf8(strUtf8)    

var   bstr   =   ""; 
var   nTotalChars   =   strUtf8.length; //   total   chars   to   be   processed. 
var   nOffset   =   0; //   processing   point   on   strUtf8 
var   nRemainingBytes   =   nTotalChars; //   how   many   bytes   left   to   be   converted 
var   nOutputPosition   =   0; 
var   iCode,   iCode1,   iCode2; //   the   value   of   the   unicode. 
   
while   (nOffset   <   nTotalChars) 

iCode   =   strUtf8.charCodeAt(nOffset); 
if   ((iCode   &   0x80)   ==   0) //   1   byte. 

if   (   nRemainingBytes   <   1   ) //   not   enough   data 
break; 
   
bstr   +=   String.fromCharCode(iCode   &   0x7F); 
nOffset   ++; 
nRemainingBytes   -=   1; 

else   if   ((iCode   &   0xE0)   ==   0xC0) //   2   bytes 

iCode1   =     strUtf8.charCodeAt(nOffset   +   1); 
if   (   nRemainingBytes   <   2   || //   not   enough   data 
    (iCode1   &   0xC0)   !=   0x80   ) //   invalid   pattern 

break; 

   
bstr   +=   String.fromCharCode(((iCode   &   0x3F)   <<   6)   |   (   iCode1   &   0x3F)); 
nOffset   +=   2; 
nRemainingBytes   -=   2; 

else   if   ((iCode   &   0xF0)   ==   0xE0) //   3   bytes 

iCode1   =     strUtf8.charCodeAt(nOffset   +   1); 
iCode2   =     strUtf8.charCodeAt(nOffset   +   2); 
if   (   nRemainingBytes   <   3   || //   not   enough   data 
    (iCode1   &   0xC0)   !=   0x80   || //   invalid   pattern 
    (iCode2   &   0xC0)   !=   0x80   ) 

break; 

   
bstr   +=   String.fromCharCode(((iCode   &   0x0F)   <<   12)   |    
((iCode1   &   0x3F)   <<     6)   | 
(iCode2   &   0x3F)); 
nOffset   +=   3; 
nRemainingBytes   -=   3; 

else //   4   or   more   bytes   --   unsupported 
break; 

   
if   (nRemainingBytes   !=   0) 

//   bad   UTF8   string. 
return   ""; 

   
   
return   bstr; 


   
function   utf8CodeToChineseChar(strUtf8) 

      var   iCode,   iCode1,   iCode2; 
      iCode   =   parseInt("0x"   +   strUtf8.substr(1,   2)); 
      iCode1   =   parseInt("0x"   +   strUtf8.substr(4,   2)); 
      iCode2   =   parseInt("0x"   +   strUtf8.substr(7,   2)); 
       
      return   String.fromCharCode(((iCode   &   0x0F)   <<   12)   |    
((iCode1   &   0x3F)   <<     6)   | 
(iCode2   &   0x3F)); 

   
   var test ="%3CHTML%3E %3CHEAD%3E %3CCENTER%3E %3CH1%3EEncountered an NDS error while updating the new password. %3CP%3EPlease contact the system administrator. %3C/H1%3E %3C/CENTER%3E %3C/HEAD%3E %3C/HTML%3E";

//替换掉中文字符串中的括号“<>”
    test = strReplaceAll(test,"%3C","<");
    test = strReplaceAll(test,"%3E",">");

     
alert(chineseFromUtf8Url("%3CHTML%3E %3CHEAD%3E %3CCENTER%3E %3CH1%3EEncountered an NDS error while updating the new password. %3CP%3EPlease contact the system administrator. %3C/H1%3E %3C/CENTER%3E %3C/HEAD%3E %3C/HTML%3E------"+test)) 

</script>


<script language="javascript">
//替换所有字符
function replace(str,a,b)
    {
     var i;
     var s2 = str;
    
     while(s2.indexOf(a)>0)
     {
     i = s2.indexOf(a);
     s2 = s2.substring(0, i) + b
     + s2.substring(i + 2, s2.length);
     }
     return s2;
    }
</script>
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
小程序中文字符串转换UTF-8编码是很常见的需求。UTF-8是一种用于跨平台使用的Unicode字符编码,通过将中文字符转成UTF-8编码,可以让应用程序在各种不同的操作系统和设备上正常运行。以下是一种简单的将中文字符串转换UTF-8编码的方法: 首先,需要将中文字符串转换成数组,可以使用JavaScript中的split()方法,将字符串按照字符拆分成数组。例如: var str = "这是一个测试字符串"; var arr = str.split(''); 然后,需要将数组中每个字符的Unicode值转换UTF-8编码UTF-8编码的规则是,对于一个Unicode值,如果它小于等于127,则直接用一个字节表示,否则需要用2到4个字节表示。具体的规则可以参考UTF-8编码表。 因此,可以使用JavaScript中的charCodeAt()方法获取每个字符的Unicode值,然后根据其值转换成相应的UTF-8编码。例如: var utf8Arr = []; for(var i=0; i<arr.length; i++){ var code = arr[i].charCodeAt(); if(code <= 127){ utf8Arr.push(code); }else if(code <= 2047){ utf8Arr.push((code >> 6) | 192); utf8Arr.push((code & 63) | 128); }else{ utf8Arr.push((code >> 12) | 224); utf8Arr.push(((code >> 6) & 63) | 128); utf8Arr.push((code & 63) | 128); } } 最后,将转换后的UTF-8编码数组转换字符串即可。可以使用JavaScript中的fromCharCode()方法将每个字节值转换成对应的字符,然后通过join()方法将字符数组拼接成字符串。例如: var utf8Str = String.fromCharCode.apply(null, utf8Arr); console.log(utf8Str); 这样就可以将中文字符串转换UTF-8编码了。需要注意的是,JavaScript字符串本身已经是以UTF-16编码存储的,因此如果只是在小程序内部使用字符串,不需要进行UTF-8编码转换。只有在需要将字符串传给其他平台或系统时,才需要进行转换

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值