2016-09-11 11 views
2

Я пишу приложение (использует UTF-8), которое нужно читать/записывать во вторую базу данных внешнего приложения (использует ISO-8859-1).Как закодировать строку в UTF-8 из ResultSet, закодированной в latin1

try { 
    // data in latin1 
    String s = rs.getString("sAddrNameF"); 
    System.out.println(s); // shows "Adresse d'exp�dition" 
    byte[] data = s.getBytes(); 
    String value = new String(data, "UTF-8"); 
    System.out.println("data in UTF8: " + value); 
    // The expected result should be "Adresse d'expédition" 
} catch (UnsupportedEncodingException e) { 
    e.printStackTrace(); 
} 

Этот код не работает, мне также нужно выполнить обратное преобразование (запись в базе данных). Если кто-то знает изящное решение для работы с разными кодировками в одном приложении, пожалуйста, дайте мне знать, я ценю это.

+0

Я использую UTF-8, то IntelliJ использует UTF-8 в качестве стандартного –

+0

любой трюк для открытия кодировку файла? потому что я просто восстанавливаю резервную копию сценария базы данных. 'mysql -uroot -p

+0

Попробуйте' System.out.println («é \ u00E9»); 'Только если эти' éé' правильно показаны, возникает проблема. Консоль ненадежна, поскольку использует собственную кодировку. Неправильный подход к использованию с байтами. Кодирование протокола передачи java JDBC. –

ответ

-2

Функция getBytes принимает также Charset или просто строку с требуемой кодировкой.

byte[] data = s.getBytes("UTF-8"); 
// or 
byte[] data = s.getBytes(Charset.forName("UTF-8")); 
6
String s = rs.getString("sAddrNameF"); 
System.out.println(s); // shows "Adresse d'exp�dition" 

Это означает, что строка либо уже повреждены в базе данных, или вы подключаетесь к базе данных с неправильным кодированием (например, передавая characterEncoding=utf8 с MySQL).

Нет такой вещи, как преобразование строки из одной кодировки в другую. Как только у вас есть String, это всегда UTF-16.

Если это проблема конфигурации, вам не нужно беспокоиться. rs.getString() вернет правильные строки, а PreparedStatement.setString() будет убедиться, что строки правильно сохранены в базе данных.

What you should know about Unicode

+0

Хорошо, сейчас работает, я считаю, что исходный файл (экспортированный скрипт .sql) был изменен и сохранен в UTF-8 кем-то из каталога проекта с использованием IntelliJ. Я просто экспортирую с нуля и восстанавливаю файл резервной копии и сейчас работаю. @Kayaman Спасибо за вашу помощь! –