如何解决oracle blob字段 的乱码问题
2016-11-07 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
字符串以blob以byte[] 二进制的形式存成blob字段
案例一:
oracle数据库服务器系统使用的是UTF-8编码或者是AL32UTF8编码
2.在Web应用中已经将请求编码设置为UTF-8编码
3二进制数据的取得
1
2
3
4
5
6
7
8
9
10
11
Blob blogObj = rst.getBlob("CONTENT");
if(blogObj!=null){
byte[] content = blogObj.getBytes(1, (int) blogObj.length());
try {
news.setContent(new String(content));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
乱码问题的解决方法:
news.setContent(new String(content,“UTF-8”));
案例二:读取blob,解决oracle中blob字段下载后的乱码问题
解决方法:注意不能按照像其他数据库那样的取法,而注意使用getBlob()这个oracle特有的方法。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
if (queryResult.next()) ...{
tfzn018KtfjxxPO.setTec_attachid(queryResult.getLong("TEC_ATTACHID"));
tfzn018KtfjxxPO.setTec_attachpostfix(queryResult.getString("TEC_ATTACHPOSTFIX"));
java.sql.Blob blob = queryResult.getBlob("TEC_ATTACHCONTENT");
InputStream is = blob.getBinaryStream();
int bytesRead = 0;
byte[] buffer = new byte[8192];
// 从输入流读到字节数组
while ((bytesRead = is.read(buffer, 0, 8192)) != -1) ...{
// 从字节数组到输出流
baos.write(buffer, 0, bytesRead);
}
byte[] bufferFile = baos.toByteArray();
tfzn018KtfjxxPO.setTec_attachcontent(bufferFile);
connection.commit();
}
总结如下:
1,导入导出的方法有问题,可能需要指定什么参数。
2,数据库版本不同,对blob的处理方法不一致所致。
3,jdbc连接问题。
通过注册表修改
HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0
NLS_LANG 改为你需要的字符集.
常用字符集(暂时只收集到两个)
AMERICAN_AMERICA.WE8ISO8859P1
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
american_america.AL32UTF8
1--------- AMERICAN_AMERICA.zhs16gbk
2--------- AMERICAN_AMERICA.utf8
修改下注册表即可。
案例一:
oracle数据库服务器系统使用的是UTF-8编码或者是AL32UTF8编码
2.在Web应用中已经将请求编码设置为UTF-8编码
3二进制数据的取得
1
2
3
4
5
6
7
8
9
10
11
Blob blogObj = rst.getBlob("CONTENT");
if(blogObj!=null){
byte[] content = blogObj.getBytes(1, (int) blogObj.length());
try {
news.setContent(new String(content));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
乱码问题的解决方法:
news.setContent(new String(content,“UTF-8”));
案例二:读取blob,解决oracle中blob字段下载后的乱码问题
解决方法:注意不能按照像其他数据库那样的取法,而注意使用getBlob()这个oracle特有的方法。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
if (queryResult.next()) ...{
tfzn018KtfjxxPO.setTec_attachid(queryResult.getLong("TEC_ATTACHID"));
tfzn018KtfjxxPO.setTec_attachpostfix(queryResult.getString("TEC_ATTACHPOSTFIX"));
java.sql.Blob blob = queryResult.getBlob("TEC_ATTACHCONTENT");
InputStream is = blob.getBinaryStream();
int bytesRead = 0;
byte[] buffer = new byte[8192];
// 从输入流读到字节数组
while ((bytesRead = is.read(buffer, 0, 8192)) != -1) ...{
// 从字节数组到输出流
baos.write(buffer, 0, bytesRead);
}
byte[] bufferFile = baos.toByteArray();
tfzn018KtfjxxPO.setTec_attachcontent(bufferFile);
connection.commit();
}
总结如下:
1,导入导出的方法有问题,可能需要指定什么参数。
2,数据库版本不同,对blob的处理方法不一致所致。
3,jdbc连接问题。
通过注册表修改
HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0
NLS_LANG 改为你需要的字符集.
常用字符集(暂时只收集到两个)
AMERICAN_AMERICA.WE8ISO8859P1
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
american_america.AL32UTF8
1--------- AMERICAN_AMERICA.zhs16gbk
2--------- AMERICAN_AMERICA.utf8
修改下注册表即可。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询