使用java解码来自unicode的字符

时间:2014-04-06 12:17:50

标签: java mysql unicode

我无法在mysql中插入中文字符。所以我虽然这样做。我有一张excel表,里面有汉字。像秀昭之类的。

我使用下面的代码将它们转换为\uxxx之类的unicode表示,然后我将其存储在MySQL中。

private static String escapeNonAscii(String str) {
    List<String> arr = new ArrayList<String>();
    StringBuilder retStr = new StringBuilder();
    for (int i = 0; i < str.length(); i++) {
        int cp = Character.codePointAt(str, i);
        System.out.println("cp="+cp);
        int charCount = Character.charCount(cp);
        if (charCount > 1) {
            i += charCount - 1; // 2.
            if (i >= str.length()) {
                throw new IllegalArgumentException("truncated unexpectedly");
            }
        }

        if (cp < 128) {
            retStr.appendCodePoint(cp);
        } else {
            retStr.append(String.format("\\u%x", cp));
            arr.add(String.format("\\\\u%x", cp));
        }
    }
    return retStr.toString();
}

值已妥善存储。所以现在我需要重新显示它们。我试过的时候

System.out.println("\u8BF7\u5728\u6B64\u5904");

它给我正确的输出,如

`请在此`

但是当我从DB读取并且喜欢

System.out.println(rs.getString(1).trim().toString() + " from DB");

打印

`\u8BF7\u5728\u6B64\u5904`

可能是什么问题?我错过了什么吗?请帮忙。

1 个答案:

答案 0 :(得分:0)

只有在编译之前才会处理转义字符。要存储和检索数据库中的数据,您只需要考虑两件事:确保您读取的数据具有正确的编码。在打印数据时,设置正确的编码。 如果您在Windows机器上读取数据,则必须使用cp *编码。只需使用InputStreamReader并设置charset。现在您拥有JVM中的数据。内部编码是一些utf-16。现在您使用类型4 jdbc,除了数据库需要能够存储数据的编码之外,您不必担心编码。 UTF-8或Unicode将成为绝招。有关要设置的属性,请参阅jdbc文档。有时您已明确设置了编码(jdbc:mysql:// localhost:3306 /?useUnicode = yes&amp; characterEncoding = UTF-8)。 输出数据时,有时输出必须具有特定的编码。通常,您的JVM使用默认的系统字符集运行,但您需要另一个,例如在呈现HTML文件时。