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)));  //此方法不会出现乱码


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值