比较奇怪 我直接拿 最终要显示的文字 在JAVA里 先stest=new String(stest.getBytes("UTF8"),"GBK"); 再 stest=new String(stest.getBytes("GBK"),"UTF8"); 转换后就是对的(stest开始时赋的值,如“me>华夏</TA”)但是我如果用直接收到的报文(已经是UTF8码),调new String(stest.getBytes("GBK"),"UTF8")就会有部分转的不对。收到的报文呢和上面那段stest=new String(stest.getBytes("UTF8"),"GBK"); 得到的是一样的,但是最后UTF8转GBK就不一样了。希望各位大侠能帮我想想。

解决方案 »

  1.   

    可能上面说的不是很清楚。我就是想把“stest="<?xml version='1.0' encoding='UTF-8'?><Response><Ctrl><sverretcod>0000</sverretcod><sverretmsg>浜ゆ槗鎴愬姛!</sverretmsg><sverworkdate></sverworkdate><sverworktime></sverworktime><sverserialno></sverserialno><errorCode>0000</errorCode><errorMsg>浜ゆ槗鎴愬姛!</errorMsg><workdate></workdate><worktime></worktime><serialno></serialno><channelserno></channelserno></Ctrl><Head><FunctionId>100334</FunctionId><ExSerial></ExSerial><ErrorNo>0000</ErrorNo><ErrorInfo>浜ゆ槗鎴愬姛!</ErrorInfo><Reserve></Reserve></Head><Body><TotNum>13</TotNum><RetNum>13</RetNum><OffSet>0</OffSet><bodrcd><TACode>01</TACode><TAName>鍗楁柟鍩洪噾绠$悊鏈夐檺鍏徃</TAName></bodrcd><bodrcd><TACode>03</TACode><TAName>鍗庡鍩洪噾绠$悊鏈夐檺鍏徃</TAName></bodrcd><bodrcd><TACode>04</TACode><TAName>鍗庡畨鍩洪噾</TAName></bodrcd><bodrcd><TACode>05</TACode><TAName>鍗氭椂鍩洪噾</TAName></bodrcd><bodrcd><TACode>060</TACode><TAName>涓滆帪閾惰娴嬭瘯</TAName></bodrcd><bodrcd><TACode>07</TACode><TAName>鍢夊疄鍩洪噾绠$悊鏈夐檺鍏徃</TAName></bodrcd><bodrcd><TACode>18</TACode><TAName>閾跺崕鍩洪噾绠$悊鏈夐檺鍏徃</TAName></bodrcd><bodrcd><TACode>22</TACode><TAName>娉拌揪鑽烽摱鍩洪噾绠$悊鏈夐檺鍏徃</TAName></bodrcd><bodrcd><TACode>45</TACode><TAName>鍥芥捣瀵屽叞鍏嬫灄鍩洪噾绠$悊鏈夐檺鍏徃</TAName></bodrcd><bodrcd><TACode>55</TACode><TAName>淇¤瘹鍩洪噾</TAName></bodrcd><bodrcd><TACode>98</TACode><TAName>涓櫥娣卞湷</TAName></bodrcd><bodrcd><TACode>99</TACode><TAName>涓櫥涓婃捣</TAName></bodrcd><bodrcd><TACode>DG</TACode><TAName>涓滆帪閾惰</TAName></bodrcd></Body></Response>";”  这么个串转换成GBK格式的串,转完后不能有乱码、问号。请各位大神帮忙看看呢。最好能把怎么解决的代码贴出来,谢谢。
      

  2.   

    上面粘帖的有点问题,串是stest后面那个双引号里面的内容
      

  3.   

    楼主要需要在得到stest字符串前就要转码,如果这个字符串是从流中读取可以InputStreamReader(InputStream in, Charset cs)  设置好charset
      

  4.   

    但是我如果用直接收到的报文(已经是UTF8码),调new String(stest.getBytes("GBK"),"UTF8")已经是UTF-8还stest.getBytes("GBK")当然不对。 
      

  5.   

    但是我如果用直接收到的报文(已经是UTF8码),调new String(stest.getBytes("UTF8"  ), "GBK" )转GBK
      

  6.   


    应该用new String(s.getBytes("ISO-8859-1"), "UTF-8");
      

  7.   

    楼主需求是啥,将UTF-8转为GBK么?
      

  8.   

    目前 我在2楼贴的那个串,  用new String(recvbuf.getBytes("GBK"),"UTF-8"); 中间会有个华夏的夏会转错。但是另外个串就错的多了。
      

  9.   

    用的weblogic
    LANGUAGE=zh_CN.GB18030:zh_CN.GB2312:zh_CN 这个好像是按GBK接收的吧
      

  10.   

    华厦那个夏字感觉本身传过来就有问题了,我直接将文件的编码改成UTF-8时,这个字就是乱码,楼主是否考虑看下发过来的源头,一步步仔细排查。
      

  11.   


    你直接把那个串 拷贝到UE里面,保存的时候不输扩展名,再打开,你会发现华夏的夏就是对的。
    另外我直接在程序里把那串汉字赋给变量,再转成UTF的,和我接收到的报文是一样的。所以接收到的没问题。
      

  12.   


    这样的话 楼主用new String(stest.getBytes("GBK"),"UTF8")应该没错,
    有没有试过new String(stest.getBytes("GB2312"),"UTF8")哦
      

  13.   

    4楼的做法是对的InputStream it = request.getInputStream();
    InputStreamReader reader = new InputStreamReader(it, "UTF-8");
      

  14.   

    4楼那个我也加了 ,按字节读完后,NEWstring的时候也指定UTF-8,后面就不需要再转换了