1. 程式人生 > >java網路傳輸字元編碼亂碼解決

java網路傳輸字元編碼亂碼解決

1.需求:後臺使用java編碼,傳遞到前臺使用js接收解碼

解決:

1)後臺:json字串形式傳遞

  ①簡單的java物件轉化成jsonObject,再toString()

JSONObject rtObject = new JSONObject();
rtObject.put("flag",URLEncoder.encode((String)rs.get("error_code"), Config.ENCODING));
rtObject.put("errorMessage",URLEncoder.encode((String)rs.get("error_msg"), Config.ENCODING));
return rtObject.toString();

 ②有很多屬性的物件,整體當做jsonObject傳遞,通過一個方法convertUrlEncodeString先轉化成屬性值編碼後的物件,然後通過bean2JSon方法將java物件轉化成jsonObject字串


/**
* bean複製String型別的屬性,將字元轉化成url編碼格式(UTF-8),用於網路傳輸
* @param oriBean
* @param bean
* @return
* @throws IllegalAccessException 
* @throws IllegalArgumentException 
* @throws UnsupportedEncodingException 
*/
private OcrResultBean convertUrlEncodeString(OcrResultBean oriBean) throws IllegalArgumentException, IllegalAccessException, UnsupportedEncodingException{
OcrResultBean bean

 = new OcrResultBean ();

Field[] field = oriBean.getClass().getDeclaredFields();
for(int i=0 ; i<field.length ; i++){     //遍歷所有屬性
Field f = field[i];  
          f.setAccessible(true); //設定些屬性是可以訪問的  
          Object val = f.get(oriBean);//得到oriBean此屬性的值     
       
          String type = f.getType().toString();//得到此屬性的型別  
          if (type.endsWith("String")) {  
             f.set(bean,URLEncoder.encode((String)val,"UTF-8")) ;        //給bean此屬性設值,utf-8編碼  
          }
          
          /*else if(type.endsWith("int") || type.endsWith("Integer")){  
             f.set(bean,12) ;       //給屬性設值  
          }else{  
             //System.out.println(f.getType()+"\t");  
          }*/  
}
return bean;
}

public String bean2JSon(Object bean){
 try {
return mapper.writeValueAsString(bean);
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();

 return null;
 }

2)前臺js接收解碼

//$("#result").html(decodeURI(JSON.stringify(data)));     //不要使用此方法,會出現亂碼,如8172323%40qq.com (%40應該是@)
$("#result").html(decodeURIComponent(JSON.stringify(data)));  //此方法不會出現亂碼