我在Oracle DB中将数据类型存储为blob(XML)。 我正在检索此列并转换为byte []然后转换为字符串。我做一些字符串操作并将其转换为UTF-8格式并插回数据库。某些特殊字符作为垃圾字符插入。我真的不知道我做错了什么? 任何想法/帮助将受到高度赞赏。
这是源代码。
// DB COnnection
// Get the resultset
Blob data = (Blob) rs.getBlob(3);
byte[] bdata = data.getBytes(1,(int)data.length());
// Converting to String and doing operation
s = new String(bdata);
// String operation
// Before inserting into DB, converting to UTF-8 format.
byte[] dataAsByteArray = s.getBytes("UTF8");
updateStmt.setBinaryStream(1,
new ByteArrayInputStream(dataAsByteArray),dataAsByteArray.length);
commit();
答案 0 :(得分:2)
BLOB最初是UTF-8格式吗?如果它在XML中真的,我会使用XML API来读取和解释标题。标题(如果存在)可以指定字符编码。请参阅DocumentBuilder,并将BLOB读作InputStream,以避免在您身边进行任何字节到字符的转换。
在上面注意,当你将它转换为String时,你没有在那里指定byte-to-char编码。
// Converting to String and doing operation
s = new String(bdata);
以上使用JVM运行的默认字符集(doc here)。所以我认为上面有一些错误的可能性。我将确认BLOB的字符编码,并在String转换中强制执行byte-to-char编码。
此外,我不记得UTF8
除UTF-8
之外是否有效用于指定编码。我想这可能是因为我预计会发生异常,但也许值得一试。