将字符串转换为UTF-8字符时的奇怪行为

时间:2010-01-27 00:04:24

标签: java utf-8

我在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();

1 个答案:

答案 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编码。

此外,我不记得UTF8UTF-8之外是否有效用于指定编码。我想这可能是因为我预计会发生异常,但也许值得一试。