从Oracle读取Windows-1252格式并使用UTF-8编码的Latin1字符写入XML文件

时间:2014-03-27 10:46:12

标签: java oracle encoding latin1

我试图从oracle db中读取,该数据库以Windows-1252编码存储数据。我正在使用jdbc读取该数据并使用UTF-8编码写入xml文件。

在写这些文件时,我得到了'?'字符而不是拉丁字符,例如而不是í,我得到了一个?

'Coquí'被写为'Coqu?'

我稍后使用此文件上传到solr。 我只把相关的代码放在这里而不是整个代码,因为它是一个很长的方法(我继承的遗留代码),这很复杂。

BufferedWriter result = new BufferedWriter(new FileWriter(OUTPUT_FILE));

                stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
                rst = stmt.executeQuery(sql);
                if (rst.getFetchSize() < 1)
                    return;

                    rst.beforeFirst();

                while (rst.next()) {

                    Profile p = new Profile(); 
                    p.business_name = rst.getString("business_name");
                    p.business_name_sort = rst.getString("business_name_sort");

                      result.write(p.business_name;
                      result.write(p.business_name_sort);

                 }

1 个答案:

答案 0 :(得分:3)

通过它的声音(你还没有给我们相关的代码,所以我无法确定)你没有正确处理字符集转换。 Java不会为您执行任何自动字符集转换 - 您必须自己完成。

您可以执行以下操作将其转换为UTF-8:

String utf8Text = new String(originalText.getBytes("UTF-8"), "UTF-8");

这假设originalText是包含Windows-1252编码文本的String