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

时间:2013-08-23 14:46:54

标签: java sql-server jdbc unicode resultset

我有以下问题。 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);

对于汉字仍然有同样的问号。

的问候。

2 个答案:

答案 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”);