繁体   English   中英

使用Java从Unicode解码字符

[英]decode character from unicode using java

我无法向mysql插入中文字符。 所以我虽然这样做。 我有一个有汉字的Excel工作表。 秀昭等。

我使用下面从SO获得的代码将它们转换为\\uxxx\u003c/code>类的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");

它给了我适当的输出,例如

`请在此`

但是当我从数据库中读取并喜欢

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

它印了

`\u8BF7\u5728\u6B64\u5904`

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM