java - 如何从以 latin1 编码的结果集中以 UTF-8 编码字符串

标签 java encoding utf-8 resultset iso-8859-1

我正在编写一个需要读取/写入外部应用程序(使用 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() 将确保字符串正确保存在数据库中。

What you should know about Unicode

关于java - 如何从以 latin1 编码的结果集中以 UTF-8 编码字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39440363/

相关文章:

java - 从发送到 AWS/Amazon SQS 的消息中删除无效字符

python - Windows 文件名在 Linux 中显示损坏的字符

java - 强制 Spring Boot 不使用 EmbeddedWebApplicationContext?

java - Apache CXF Web 服务上的 SOAP 命名空间问题

php - PHP MySQL 站点中的西里尔字母编码问题

python - Bokeh 'utf8' 编解码器无法解码字节 0xe9 : unexpected end of data

javascript - 在 JavaScript 中显示来自 resources.resx 的文本

java - commons-net FTPClient.retrieveFileStream() 返回错误结果

java - 执行jar时未找到main

html - HTML 页面标题中的西类牙字符