我在 Oracle 数据库中将数据类型存储为 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();
最佳答案
BLOB 最初是 UTF-8 格式吗?如果它是 真的 在 XML 中,我会使用 XML API 来读取和解释 header 。 header (如果存在)可以指定字符编码。参见 DocumentBuilder ,并将 BLOB 读取为 InputStream,以避免在您这边进行任何字节到字符的转换。
请注意,在上面,当您将其转换为 String 时,您不会在那里指定字节到字符的编码。
// Converting to String and doing operation
s = new String(bdata);
上面使用了 JVM 运行时使用的默认字符集 (doc here)。所以我认为上面有一些错误的可能性。我会确认 BLOB 的字符编码,并在字符串转换中强制执行字节到字符的编码。
此外,我不记得除了 UTF-8
之外,UTF8
是否有效用于指定编码。我想这可能是因为我预计会出现异常,但也许值得检查一下。
关于java - 将字符串转换为 UTF-8 字符时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2143658/