8中的字符串进行编码

ehxuflar  于 2021-06-20  发布在  Mysql
关注(0)|答案(4)|浏览(413)

我正在编写一个应用程序(使用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();
}

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

qltillow

qltillow1#

String s = rs.getString("sAddrNameF");
System.out.println(s); // shows "Adresse d'exp�dition"

这意味着该字符串要么已经在数据库中损坏,要么使用错误的编码连接到数据库(例如传递) characterEncoding=utf8 使用mysql)。
没有把字符串从一种编码转换成另一种编码这样的事情。一旦你有了 String 总是utf-16。
如果只是配置问题,您不必担心。这个 rs.getString() 将返回正确的字符串和 PreparedStatement.setString() 将确保字符串正确保存在数据库中。
关于unicode你应该知道什么

r55awzrz

r55awzrz2#

函数getbytes还接受一个字符集,或者只接受具有所需编码的字符串。

byte[] data = s.getBytes("UTF-8");
// or
byte[] data = s.getBytes(Charset.forName("UTF-8"));
bkhjykvo

bkhjykvo3#

我们需要将字符串标注为standardcharsets.utf\u 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();
    }
ix0qys7i

ix0qys7i4#

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

相关问题