有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java编码困难

我正在处理的代码有一些编码问题。接收加密字符串,并使用ISO-8859-1进行解码。然后将该字符串放入具有UTF-8编码的DB中。当检索到这个字符串时,它仍然是ISO-8859-1,并且没有问题。问题是我还需要能够以UTF-8的形式检索这个字符串,但我在这方面还没有成功

当使用以下方法从DB检索时,我尝试将字符串从ISO转换为UTF-8:

private String convertIsoToUtf8(String isoLatin) {
    try {
        return new String(isoLatin.getBytes("ISO_8859_1"), "UTF_8");
    } catch (UnsupportedEncodingException e) {
        return isoLatin;
    }
}

不幸的是,在本例中,特殊字符仅显示为问号

原始字符串:Testæå 从DB检索并转换为UTF-8后的输出示例:测试

更新:在阅读了评论中提供的链接后,我成功地把它弄对了。因为DB已经是UTF-8编码的,所以我需要做的就是:

return new String(isoLatin.getBytes("UTF-8"));

共 (1) 个答案

  1. # 1 楼答案

    当您已经有了一个String-对象时,纠正任何编码问题通常都为时已晚,因为有些信息可能已经丢失了-想想那些无法一对一映射到java内部UTF-16表示的字符

    处理字符编码的正确位置是您获取字符串的时刻:从文件读取输入时(在InputStreamReader上设置正确的编码)、转换从解密获得的byte[]时、从数据库读取时(这应该由JDBC驱动程序处理)等等

    在进行反向操作时,还要注意正确处理编码。虽然在大多数情况下,当您使用默认编码时,它似乎可以正常工作,但您可能迟早会遇到难以解决的问题(就像您现在所做的那样)

    注意:还要记住您使用什么工具来显示您的输出:一些控制台不会显示UTF-16或UTF-8,请检查用于查看文件的编辑器的编码设置等。有时您的输出可能是正确的,只是无法正确显示