Java 如何从拉丁语编码的结果集以UTF-8编码字符串

Java 如何从拉丁语编码的结果集以UTF-8编码字符串,java,encoding,utf-8,resultset,iso-8859-1,Java,Encoding,Utf 8,Resultset,Iso 8859 1,我正在编写一个应用程序(使用UTF-8),它需要读/写外部应用程序的第二个数据库(使用ISO-8859-1) 试试看{ //拉丁语数据1 字符串s=rs.getString(“sAddrNameF”); System.out.println(s);//显示“address d'exp”�“条件” 字节[]数据=s.getBytes(); 字符串值=新字符串(数据,“UTF-8”); System.out.println(“UTF8中的数据:“+值”); //预期结果应为“地址扩展” }捕获(不支

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

试试看{
//拉丁语数据1
字符串s=rs.getString(“sAddrNameF”);
System.out.println(s);//显示“address d'exp”�“条件”
字节[]数据=s.getBytes();
字符串值=新字符串(数据,“UTF-8”);
System.out.println(“UTF8中的数据:“+值”);
//预期结果应为“地址扩展”
}捕获(不支持的编码异常e){
e、 printStackTrace();
}

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

函数getBytes还接受一个字符集或一个具有所需编码的字符串

byte[] data = s.getBytes("UTF-8");
// or
byte[] data = s.getBytes(Charset.forName("UTF-8"));
这意味着数据库中的字符串已经损坏,或者您正在使用错误的编码连接到数据库(例如使用MySQL传递
characterEncoding=utf8

不存在将字符串从一种编码转换为另一种编码的事情。一旦你有了
字符串
,它总是UTF-16

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


我们需要将字符串标注为标准字符集。UTF_8

try {
        // data in latin1
        String s = rs.getString("sAddrNameF");
        System.out.println(s); // shows "Adresse d'exp�dition"
        byte[] data = rs.getBytes("sAddrNameF");
        String value = new String(data, StandardCharsets.UTF_8);
        System.out.println("data in UTF8: " + value);

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

字符串值=新字符串(数据,“ISO-8859-1”)

我用的是UTF-8,IntelliJ用的是UTF-8作为标准,有没有发现文件编码的技巧?因为我刚刚恢复了数据库脚本备份
mysql-uroot-p
Try
System.out.println(“é\u00E9”)仅当正确显示那些
时,才有问题。控制台不可靠,因为它使用自己的编码。在这里,摆弄字节是错误的方法。更多关于java JDBC驱动程序传输协议的编码。任何程序员编辑器(如记事本++或JEdit)都可以识别编码。请尝试将默认语言环境设置为与拉丁语等效的语言环境,然后运行代码。您应该看到您的系统打印正确。如果您这样做了,那么您的数据库和值本身是好的。好的,现在正在工作,我相信原始文件(script.sql exported)是由项目目录中的某个人使用IntelliJ修改并保存在UTF-8中的。我只是从头开始导出并恢复备份文件,现在正在工作@卡亚曼谢谢你的帮助!
try {
        // data in latin1
        String s = rs.getString("sAddrNameF");
        System.out.println(s); // shows "Adresse d'exp�dition"
        byte[] data = rs.getBytes("sAddrNameF");
        String value = new String(data, StandardCharsets.UTF_8);
        System.out.println("data in UTF8: " + value);

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }