如何使用latin1中编码的ResultSet对UTF-8中的字符串进行编码

Wel*_*uza 2 java encoding resultset utf-8 iso-8859-1

我正在编写一个需要读/写外部应用程序的第二个数据库的应用程序(使用UTF-8)(使用ISO-8859-1).

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();
}
Run Code Online (Sandbox Code Playgroud)

这段代码不起作用,我还需要做相反的转换(在数据库上写).如果有人知道在同一个应用程序中处理不同编码的优雅解决方案,请告诉我,我很感激.

Kay*_*man 6

String s = rs.getString("sAddrNameF");
System.out.println(s); // shows "Adresse d'exp?dition"
Run Code Online (Sandbox Code Playgroud)

这意味着字符串在数据库中已经损坏,或者您使用错误的编码连接到数据库(例如characterEncoding=utf8使用MySQL 传递).

没有将String从一种编码转换为另一种编码的事情.一旦你拥有String它总是UTF-16.

如果只是配置问题,您无需担心.在rs.getString()将返回正确的字符串,并PreparedStatement.setString()会确保字符串被正确保存在数据库中.

您应该了解的Unicode