前言:大体思路就是 读回来之后,先编码回去,再用服务端的字符集解码
写了个反射通用方法如下:
/**
* 解决乱码问题 先用 iso-8859-1 编码 再用 GBK解码
* @param o
*/
private void convertIsoToGbk(Object o) throws IllegalAccessException, UnsupportedEncodingException {
if (o == null){
return;
}
Class<?> aClass = o.getClass();
Field[] declaredFields = aClass.getDeclaredFields();
for (Field f : declaredFields){
f.setAccessible(true);
Object v = f.get(o);
if (v instanceof String){
String s = String.valueOf(v);
byte[] bytes = s.getBytes("iso-8859-1");
s = new String(bytes, Charset.forName("GBK"));
f.set(o, s);
}
}
}
这个可以解决我的问题,因为用到的地方不多,性能影响不大。
如果你还是乱码,考虑修改 编解码的 字符集为 你的 客户端解码字符集和Oracle服务端字符集。