2013-12-20 78 views
2

我正在從Oracle數據庫讀取BLOB數據類型表。但特殊字符正在逃避。下面是我的代碼。從BLOB數據類型中引用特殊字符

public static void main(String args[]) throws FileNotFoundException 

{ 

    System.out.println("Oracle Connect START."); 
    Connection conn = null; 

    String url = "jdbc:oracle:thin:@localhost:1521:"; 
    String dbName = "xe"; 
    String driver = "oracle.jdbc.OracleDriver"; 
    String userName = "T24DBA"; 
    String password = "ABCD123abcd"; 
    int locationofp=0; 
    ResultSet orset = null; 
    ResultSet rs1 = null; 
    try { 
     Class.forName(driver).newInstance(); 
     conn = DriverManager.getConnection(url+dbName,userName,password); 
     Statement stmt = conn.createStatement(); 
     orset =stmt.executeQuery("select RECID, XMLRECORD from karthi"); 

     Blob lob = null; 
     FileOutputStream fos = new FileOutputStream("C:/DataRead/fbnk.txt"); 
     DataOutputStream dos = new DataOutputStream(fos); 

     while (orset.next()) { 
      String RECID = orset.getString(1); 


      lob=orset.getBlob("XMLRECORD"); 
      byte[] bdata = lob.getBytes(1, (int) lob.length()); 
      String text = new String(bdata); 
      System.out.println("TEXT "+ text); 
     } 
    } 

在數據庫中的記錄是

EUR100011510þGBP100011200þGBP100011250þGBP100011500þGB 

,但我得到的輸出是

EUR100011510�GBP100011200�GBP100011250�GBP100011500�GB 

我所有的場標記字符(TH)都正被泄露。

任何幫助將不勝感激。我奮力這對於過去兩天

感謝

+0

OP,這是[標籤:爪哇]?我添加了java標籤,但如果不是,我的道歉。 – Passerby

+0

是的,僅限Java! – user2742540

回答

0

的原因是你的默認字符集不是UTF-8,併爲您的特殊字符的字節是-61 -66(而非ASCII)

儘量

System.out.println(new String (bdata, "UTF-8")); 

byte[] str = "EUR100011510þGBP100011200þGBP100011250þGBP100011500þGB".getBytes(); 

    try { 
     System.out.println(new String (str, "UTF-8")); 
    } catch (UnsupportedEncodingException e1) { 
     e1.printStackTrace(); 
    } 
+0

嗨,添加UTF-8後,我也沒有收到。所有特殊字符都在逃跑。 – user2742540

+0

你能確認你的字節是否正確。正如我所說的特殊字符是-61 -66。如果數據原本不正確,我們需要看看。 –

+0

嗨,我檢查過的字節是正確的。我不知道爲什麼我的特殊字符逃脫 – user2742540

0

確保存儲數據您的數據庫採用UTF-8格式。 也創建一個新的字符串與指定的編碼:

String text = new String(bdata, "UTF-8"); 
System.out.println("TEXT "+ text); 
+0

您好Yury,感謝您的快速響應!在創建具有特定編碼的新字符串之後,我的特殊字符也會被轉義。任何背後的想法.. – user2742540

+0

很奇怪@ @ user2310289評論的例子不起作用。 只是另一種猜測 - 嘗試添加JVM參數-Dfile.encoding = UTF8 – Yury

+0

添加JVM參數我得到的「EUR100011510þGBP100011200þGBP100011250þGBP100011500þGB」 – user2742540