Java结果集不显示Unicode(中文)字符,但显示为问号

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分贝) 它显示了

我有以下问题。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;useUn‌​icode=true;characterEncoding=UTF-8”

Connection con=DriverManager.getConnection(connectionUrl)

汉字的问号还是一样的


注意。

添加连接必须类似


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();
  }
}