Java从Postgres转换为UTF-8

3

我使用存储在PostgreSQL中的数据生成HTML文件:

my data in postgres

生成的HTML文件是UTF-8编码,但字符串看起来像它们在数据库中出现的样子。

generated html file

我该怎么做才能使文本正确显示?例如:Últiles de Escritorio

注意:我无法更改PostgreSQL配置,我正在使用Java 1.6、PostgreSQL 8.4和JDBC。

更新:

我使用以下代码创建HTML文件:

public static void stringToFile (String file_name, String file_content) throws IOException {
    OutputStream out = new FileOutputStream(file_name);
    OutputStreamWriter writer = new OutputStreamWriter(out, "UTF-8");

    try {
        try {
            writer.write(file_content);
        } finally {
            writer.close();
        }
    } finally {
        out.close();
    }
}

我使用它的方式如下:

StringBuilder html_content = new StringBuilder();

ResultSet result_set = statement.executeQuery(sql_query);

while (result_set.next()) {
    html_content.append(String.format('<li>%s</li>', result_set.getString(1)));
}

Utils.stringToFile('thehtmlfile.html', html_content.toString());

更新:[已解决] 对我来说,以下方法有效:

new String(str.getBytes("ISO-8859-1"), "UTF-8")
1个回答

0

我希望你确定在将字符串添加到数据库之前没有发生错误。

因为你不能更改数据库设置,所以这不是很容易处理的问题,首先你必须知道文本将以哪种格式保存在你的数据库中,请参见此处

然后你应该熟悉UTF16,请参见此处此处

现在,在你熟悉要使用的编解码器之后,你必须为从数据库获取的每个字符创建正确的utf16值。我只是指出它可能如何工作,正确的实现需要你自己完成。

public char createUTF16char( char first, char second ) {
  char res = first;
  res = res << 8;
  res = res & (0x0F & second);
  return res;
}

这段代码应该只是将每个字符(第一个和第二个)的最后8位组合成一个新的字符。 也许这就是您需要的操作,但这取决于服务器使用的编码方式。

此致


数据已经在数据库中,我无法更改它,只能读取它。 数据库属性显示:_Encoding=UTF8_,_Collation=en_US.UTF-8_,_Character Type=en_US.UTF-8_。 如果我能够更改数据库设置,您有什么建议?谢谢。 - Luistar15
问题在于Java使用UTF16编码。你是如何创建HTML文件的? - Christian
文件是使用UTF-8(我想)创建的(我在问题中更新了代码)。 - Luistar15
这段代码看起来正确。你把它添加到你的HTML文件里了吗?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 如果没有,浏览器将不会使用正确的编码。 - Christian
是的,我做到了。虽然我不太熟悉编码,但这个方法可以解决问题:new String(str.getBytes("ISO-8859-1"), "UTF-8")。所以我猜测数据存储为 ISO-8859-1 编码。感谢您的关注。 - Luistar15

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接