js怎么才能把utf-8转换成GBK????

时间:2021-09-14 08:43:26
我用ajax向servlet传数据,从客户端传给服务器端是没有问题的,但是从服务器端传给客户端就出现了????乱码问题了,我根据网上查到的资料,把数据先转成utf-8再转过来,用alert语句打印出来的时候是好的,但是我的页面是GBK编码方式,而且不能把它转换成utf-8,因为所有的页面都是GBK方式,我把它放到页面上的时候说类型不匹配,我又到网上去找了一个js把utf-8转换成GBK的方法,方法如下,不知道有哪位朋友用过: 

function   Utf8ToUnicode(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; 


但是转了之后我再用alert语句打印的时候,发现是空的,连乱码都没有了,请问是什么原因呀???

8 个解决方案

#1


你的代码太乱了,能不能整理一下

#2


就是把代码那部分用code标注起来
function  Utf8ToUnicode(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;   
}   

#3


整理后看了一下代码,你用Utf8ToUnicode这个方法作什么?
把utf8转为unicode来整理乱码吗
在java的Sting中有一个
String s = "你好";
String str = new String(s.getBytes("ISO-8859-1"),"GBK");
System.out.println(str);

就可以转换字符集,得到中文

#4


同意楼上 在服务端用String str = new String(s.getBytes("ISO-8859-1"),"GBK");
转化后返回给页面

#5


不行的呀,我从服务器端生成GBK后,可以用ajax传过来的时候是不行的,我现在就是要在客户端把它转成GBK。

#6


上面这个方法是不对的,有没有别的方法呀

#7


修改你的<script>,  <script type="text/javascript" charset="GBK">或者<script type="text/javascript" charset="UTF-8">试一下.

#8


在script里面我能得到正确的信息,可是把UTF-8格式的文字放到GBK的页面上就不行了呀,现在就是要在javascript里面把UTF-8转成GBK。

#1


你的代码太乱了,能不能整理一下

#2


就是把代码那部分用code标注起来
function  Utf8ToUnicode(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;   
}   

#3


整理后看了一下代码,你用Utf8ToUnicode这个方法作什么?
把utf8转为unicode来整理乱码吗
在java的Sting中有一个
String s = "你好";
String str = new String(s.getBytes("ISO-8859-1"),"GBK");
System.out.println(str);

就可以转换字符集,得到中文

#4


同意楼上 在服务端用String str = new String(s.getBytes("ISO-8859-1"),"GBK");
转化后返回给页面

#5


不行的呀,我从服务器端生成GBK后,可以用ajax传过来的时候是不行的,我现在就是要在客户端把它转成GBK。

#6


上面这个方法是不对的,有没有别的方法呀

#7


修改你的<script>,  <script type="text/javascript" charset="GBK">或者<script type="text/javascript" charset="UTF-8">试一下.

#8


在script里面我能得到正确的信息,可是把UTF-8格式的文字放到GBK的页面上就不行了呀,现在就是要在javascript里面把UTF-8转成GBK。