我无法在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`
可能是什么问题?我错过了什么吗?请帮忙。
答案 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文件时。