gpt4 book ai didi

java - 从数据库到javamail的编码问题

转载 作者:搜寻专家 更新时间:2023-11-01 02:33:05 27 4
gpt4 key购买 nike

我有一个小型应用程序,它从 Oracle 9i 数据库中读取数据并使用 JavaMail 通过电子邮件发送数据。数据库有 NLS_CHARACTERSET = "WE8MSWIN1252",就是这样,CP1252。

如果我在没有任何参数的情况下运行该应用程序,它可以正常工作并且可以正确发送电子邮件。但是,我有一个强制我使用 -Dfile-encoding=utf8 参数运行应用程序的要求,这会导致发送的文本中包含损坏的字符。

我尝试更改从数据库中读取的数据的编码,方法是:

String textToSend = new String(textRead.getBytes("CP1252"), "UTF-8");

但这并没有帮助。我已经尝试了所有可能的 CP1252、windows-1252、ISO-8859-1UTF-8 组合,但仍然没有成功。

有什么想法吗?


更新 以澄清我的问题:当我执行以下操作时:

Statement stat = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
stat.executeQuery("SELECT blah FROM blahblah ...");
ResultSet rs = stat.getResultSet();
String textRead = rs.getString("whatever");

我的 textRead 已损坏,因为数据库是 CP1252 并且应用程序以 UTF-8 运行。我尝试过但也失败了的另一种方法:

InputStream is = rs.getBinaryStream("whatever");
Writer writer = new StringWriter();
char[] buffer = new char[1024];
Reader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
while ((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
String textRead = writer.toString();

最佳答案

你的驱动程序应该自动进行转换,因为 cp-1252 是 UTF-8 的子集,你不应该丢失信息。

您可以尝试以下方法吗:使用 ResultSet.getString 获取字符串,将字符串写入文件。使用可以指定 UTF-8 字符集的编辑器(例如 jEdit)打开文件。

文件应包含 UTF-8 数据。

关于java - 从数据库到javamail的编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4680330/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com