2013-08-23 69 views
2

我遇到以下問題。 java結果集不顯示Unicode(中文)字符,但顯示所有其他字符。我確信所有字符都可以從Microsoft SQL Server中正確存儲/顯示(如nvarchar)。Java結果集不顯示Unicode(中文)字符,但顯示爲問號

所以它似乎是一個檢索問題。下面是代碼:

保護字符串getStringValueNoNulls(RS結果集,字符串COLNAME) {

 String ret = rs.getString(colName); 

     ret = new String(ret.getBytes(), "UTF8"); 

     System.out.println(ret); 

... 輸出的打印語句:

SO(SO在DB)

??? (張先生在DB)

?????? 9999(DB建國門外大街9999)

?? (北京在DB)

100010(100010在DB)

它顯示所有英文/ 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

檢查:http://stackoverflow.com/questions/6838446/utf-encoding-for-chinese-charactersjava –

+0

貴控制檯('系統。 out'目的地)實際上是否支持打印這些字符? –

回答

1

好的,計算出解決方案。它的一個問題與Java & utf8編碼無法打印&寫入。 //控制檯

`字符串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(); } }

+0

如果此解決方案爲您提供幫助,請豎起大拇指。 – GreenLeaf

0

添加連接必須像

連接= riverManager.getConnection(「JDBC:SQLSERVER://190.128.4.195;的databaseName = unicodedemo;用戶= AB;密碼= AB @聯繫;了useUnicode = TRUE;的characterEncoding = UTF-8" );

+0

嗨。感謝您的答覆。我添加了這個: 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); 中國漢字仍然有相同的問題標記。 – GreenLeaf