java解决对US7ASCII编码的ORACLE数据库数据解码
来源:互联网 发布:unity3d 液体流动 编辑:程序博客网 时间:2024/05/22 03:23
一、问题描述:
1、oracle数据库中的数据是以US7ASCII编码集保存的,用程序读取时中文出现乱码现象。
2、系统中设置的NLS_LANG变量对程序数据库操作没有影响,只对plsql dev和navicat这些客户端有用。
二、问题分析:
1、程序默认使用的编码是系统的默认编码,但开发工具使用的编码集可能与系统不同,JDBC使用的编码与代码字符集一致,如下的GBK就是开发工具的编码。成功。
三、解决办法:
1、对单个字段使用String的方法在转码后构造一个新字段。
newString(filed.getBytes("ISO-8859-1"),"GBK")
2、使用指定字符集对所有字符进行解码。输入LIST对象、解码集和编码集。
/**
*对数据库返回数据进行集体解码
* @param obj
* @param origCode
* @param desCode
* @return
*/
public List decodeObj(Object obj,StringorigCode,String desCode){
if(obj instanceof List){
List objList= (List) obj;
for(ObjecttempObj:objList){
PropertyDescriptor[] properties =PropertyUtils.getPropertyDescriptors(tempObj.getClass());
for(int i=0;i<properties.length;i++){
String name = properties[i].getName();
if("class".equals(name)){
continue;
}
try {
Class classType =PropertyUtils.getPropertyType(tempObj, name);
if(classType.equals(String.class) //对所有string类型进行转码
&&PropertyUtils.isReadable(tempObj, name)
&&PropertyUtils.isWriteable(tempObj, name)){
Object value =PropertyUtils.getSimpleProperty(tempObj, name);
if(value!=null){
try {
PropertyUtils.setProperty(tempObj,name, new String(((String)value).getBytes(origCode),desCode));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
} catch (IllegalAccessException | InvocationTargetException
| NoSuchMethodException e) {
//根据对象反射,不会出现错误
}
}
}
}
return (List) obj;
}
3、使用指定字符集对所有输入字符集进行编码,顺序和编码相反。
/**
*对数据库的条件参数进行编码。
* @param map
* @param origCode
* @param desCode
* @return
*/
public Map<String, Object>encode(Map<String, Object> map,String origCode,String desCode){
if(map.size()>0){
for(Stringkey:map.keySet()){
Object value= map.get(key);
if(valueinstanceof String){
if(value!=null){
try {
map.put(key, newString(((String)value).getBytes(origCode),desCode));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
}
return map;
}
4、LIST输出的时候调用decodeObj,条件输入的时就汉字就调用encode.
5、PropertyUtils来至org.apache.commons.beanutils.PropertyUtils;
- java解决对US7ASCII编码的ORACLE数据库数据解码
- java 解决oracle US7ASCII编码,sql查询时
- mysql数据库到oracle数据库的迁移(mysql为gbk编码,oracle为US7ASCII 编码)
- 利用ODI将Oracle US7ASCII编码的数据库迁移至UTF8编码数据库
- qt 处理ORACLE的AMERICAN_AMERICA.US7ASCII编码
- 解决ORACLE字符集为US7ASCII,插入数据中文乱码问题
- oracle数据库字符集US7ASCII,在java中处理中文问题
- c#对使用US7ASCII的oracle存取中文的问题
- jdbc连接字符集为us7ascii的oracle数据库乱码解决办法
- 将US7ASCII 字符集的数据转到ZHS16GBK 字符集数据库
- java对unicode的编码 和 解码
- 对数据进行编码解码
- Oracle 数据库转码 US7ASCII ZHS16GBK
- java数据传递编码解码
- java 中对url的编码与解码
- encodeURIComponent编码后java后台解码乱码的解决
- JDBC读取Oracle的US7ASCII编码中文乱码及不同编码下汉字占用字节的问题
- Oracle 服务器 客户端 US7ASCII、 UTF8字符编码问题
- android系统媒体库开发之视频
- Graphical Layout出现EditText (Change to android.widget.EditText, Fix Build Path, Edit XML)
- python基本图像操作
- grep 命令系列:如何在 Linux/UNIX 中使用 grep 命令
- youku的js脚本的工具函数和初始化方法
- java解决对US7ASCII编码的ORACLE数据库数据解码
- add "shadow+border+corner" specially for UIView
- android 获取全局上下文
- Java关键字transient
- 在ASP.NET MVC中,App_Start/BundleConfig.cs来打包压缩js和css
- srxboys自述
- ubuntu No protocol specified
- Android方法数
- 解决iOS UITextField输入的内容在代理方面里面不能全部获取到