我有以下问题。 java结果集不显示Unicode(中文)字符,但显示所有其他字符。我确信所有字符都在Microsoft SQL Server中正确存储/显示(作为nvarchar)。
所以它似乎是一个检索问题。这是代码:
protected String getStringValueNoNulls(ResultSet rs,String colName) {
String ret = rs.getString(colName);
ret = new String(ret.getBytes(), "UTF8");
System.out.println(ret);
... print语句的输出:
SO(SO中的SO)
??? (张先生在DB)
?????? 9999(建国门外大街9999 in DB)
?? (北京在DB)
100010(数据库中100010)
显示所有英文/ ascii字符,但不显示中文字符。我注意到汉字的数量等于它取代的问号。
我之前尝试过普通的getString(),现在做转换的getBytes()都会产生相同的结果。
我缺少什么,或者它可能是驱动程序的问题?请帮忙。
----------------我刚刚添加了这个作为我的连接,没有帮助:
的Class.forName( “com.microsoft.sqlserver.jdbc.SQLServerDriver”);
String connectionUrl =“jdbc:sqlserver://127.0.0.1:1433; database = myDB; user = myuser; password = myPass; useUn icode = true; characterEncoding = UTF-8”;
Connection con = DriverManager.getConnection(connectionUrl);
对于汉字仍然有同样的问号。
的问候。
答案 0 :(得分:1)
好的,想出了解决方案。这是Java和Java的一个问题。 utf8编码无法打印&写。
(不是驱动程序问题) 首先,如果要输出(文件或控制台),则必须使用打印流: //控制台
`String ret = rs.getString(colName);
PrintStream out = new PrintStream(System.out, false, "UTF8"); //This is the key
out.println(ret); `
//文件
private static void writeUtf8ToFile(File file, boolean append, String data)
throws IOException {
boolean skipBOM = append && file.isFile() && (file.length() > 0);
Closer res = new Closer();
try {
OutputStream out = res.using(new FileOutputStream(file, append));
Writer writer = res.using(new OutputStreamWriter(out, Charset
.forName("UTF-8")));
if (!skipBOM) {
writer.write('\uFEFF');
}
writer.write(data);
} finally {
res.close();
}
}
答案 1 :(得分:0)
添加连接必须像
connection = riverManager.getConnection(“jdbc:sqlserver://190.128.4.195; databaseName = unicodedemo; user = ab; password = ab @ Admin; useUnicode = true; characterEncoding = UTF-8”);