我正在编写一个需要读取/写入外部应用程序(使用 ISO-8859-1)的第二个数据库的应用程序(使用 UTF-8)。
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();
}
这段代码不起作用,我还需要做相反的转换(写在数据库上)。如果有人知道在同一应用程序中处理不同编码的优雅解决方案,请告诉我,我很感激。
最佳答案
String s = rs.getString("sAddrNameF");
System.out.println(s); // shows "Adresse d'exp�dition"
这意味着字符串在数据库中已经损坏,或者您正在使用错误的编码连接到数据库(例如通过 MySQL 传递 characterEncoding=utf8
)。
没有将 String 从一种编码转换为另一种编码这样的事情。一旦你有了一个 String
,它总是 UTF-16。
如果只是配置问题,您不必担心。 rs.getString()
将返回正确的字符串,PreparedStatement.setString()
将确保字符串正确保存在数据库中。
关于java - 如何从以 latin1 编码的结果集中以 UTF-8 编码字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39440363/