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

标签 java utf-8

我在 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/

相关文章:

c# - 在 C# Sinhala unicode 字体渲染问题中打印 unicode 字体

google-chrome - 如果文本文件在浏览器中显示错误

java - Base64.Decoder 返回外来字符

java - java中的XML解析: how to get info out of a tag adjacent to a tag with a certain value?

java - Spring Boot 菜单组件 Controller

java - BlackBerry 使用 SAX 解析器解析 UTF-8 XML 文件

java - Netbeans 我添加的库 JAR/文件夹在哪里

java - 在 Tomcat 服务器上部署独立的 jar

java - 转换 &#XXXX; Java中的字符到UTF-8

vim - 如何在vim中将\u7f51更改为普通字符?