У меня есть небольшое приложение, которое читает из базы данных Oracle 9i и отправляет данные по электронной почте, используя JavaMail.В базе данных есть NLS_CHARACTERSET = "WE8MSWIN1252"
, вот и все, CP1252.
Если я запускаю приложение без каких-либо параметров, оно работает нормально, и электронные письма отправляются правильно.Однако у меня есть требование, которое заставляет меня запускать приложение с параметром -Dfile-encoding=utf8
, что приводит к тому, что текст отправляется с поврежденными символами.
Я пытался изменить кодировку считываемых данныхиз базы данных, с:
String textToSend = new String(textRead.getBytes("CP1252"), "UTF-8");
Но это не помогает.Я перепробовал все возможные комбинации с CP1252, windows-1252, ISO-8859-1
и UTF-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();