Java结果集不显示Unicode(中文)字符,但显示为问号
我有以下问题。java结果集不显示Unicode(中文)字符,而是显示所有其他字符。我确信所有字符都已从Microsoft SQL Server(作为nvarchar)中正确存储/显示 因此,这似乎是一个检索问题。代码如下: 受保护的字符串getStringValueNoNulls(结果集rs,字符串colName) { 。。。 打印语句的输出: SO(单位为DB) (张先生 单位:DB) 9999(建国门外大街9999(分贝) ?(北京 单位:DB) 100010(100010分贝) 它显示了所有的英文/ascii字符,但没有显示中文字符。我注意到中文字符的数量等于它所替换的问号 我以前尝试过纯getString(),现在执行getBytes()进行转换,两者都产生相同的结果 是我遗漏了什么,还是司机有问题?请帮忙 ----------------我只是添加了这个作为我的连接,没有帮助: Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”) 字符串connectionUrl=“jdbc:sqlserver://127.0.0.1:1433;数据库=myDB;用户=myuser;密码=myPass;useUnicode=true;characterEncoding=UTF-8” Connection con=DriverManager.getConnection(connectionUrl) 汉字的问号还是一样的Java结果集不显示Unicode(中文)字符,但显示为问号,java,sql-server,jdbc,unicode,resultset,Java,Sql Server,Jdbc,Unicode,Resultset,我有以下问题。java结果集不显示Unicode(中文)字符,而是显示所有其他字符。我确信所有字符都已从Microsoft SQL Server(作为nvarchar)中正确存储/显示 因此,这似乎是一个检索问题。代码如下: 受保护的字符串getStringValueNoNulls(结果集rs,字符串colName) { 。。。 打印语句的输出: SO(单位为DB) (张先生 单位:DB) 9999(建国门外大街9999(分贝) ?(北京 单位:DB) 100010(100010分贝) 它显示了
注意。添加连接必须类似
connection=riverManager.getConnection(“jdbc:sqlserver://190.128.4.195;databaseName=unicodedemo;user=ab;密码=ab@Admin;useUnicode=true;characterEncoding=UTF-8”);好的,找到了解决方案。这是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();
}
}
检查:您的控制台(
System.out
destination)是否支持打印这些字符?您好。感谢您的回复。我添加了以下内容:Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);String connectionUrl=“jdbc:sqlserver://127.0.0.1:1433;database=myDB;user=myuser;password=myPass;useUnicode=true;characterEncoding=UTF-8”;Connection con=DriverManager.getConnection(connectionUrl);仍然获得相同的中文字符问号。如果此解决方案对您有所帮助,请竖起大拇指。
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();
}
}