2015-11-05 80 views
0

爲GB2312試想一下,在代碼波紋管UTF8轉換在Java中

try { 
     String str = "上海上海"; 
     String gb2312 = new String(str.getBytes("utf-8"), "gb2312"); 
     String utf8 = new String(gb2312.getBytes("gb2312"), "utf-8"); 
     System.out.println(str.equals(utf8)); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } 

打印假的!

我運行此代碼都在JDK7和jdk8和IDE的我的代碼風格是UTF8。

任何人都可以幫助我嗎?

+0

java是unicode 16,而字符串類沒有字符代碼,這意味着不管你讀的是什麼類型的文件,java中帶有某些字符的字符串總是unicode –

+3

你的代碼是沒有意義的。你把一個UTF-16字符串(Java的店字符串如何),並將其編碼爲UTF-8字節流,然後解碼該字節流**彷彿**它是GB2312編碼。你最終得到垃圾!你可能意味着做,讀取(從文件例如)一個UTF-8編碼的字節流和輸出GB2312編碼的字節流(例如,另一個文件),但是這不是你在做什麼。 – Andreas

回答

0

你正在尋找的是編碼/解碼當你輸出/輸入。

爲@kalpesh說,在內部,它是所有的Unicode。如果你想在一個特定的編碼來讀取數據流,然後將其寫入到一個不同的,你將有指定字節之間的轉換編碼(在流中)和字符串(在Java),然後(在字符串之間Java)來字節(輸出流),像這樣:

 InputStream is = new FileInputStream("utf8_encoded_text.txt"); 
     OutputStream os = new FileOutputStream("gb2312_encoded.txt"); 

     Reader r = new InputStreamReader(is,"utf-8"); 
     BufferedReader br = new BufferedReader(r); 
     Writer w = new OutputStreamWriter(os, "gb2312"); 
     BufferedWriter bw = new BufferedWriter(w); 

     String s=null; 
     while((s=br.readLine())!=null) { 
      bw.write(s); 
     } 
     br.close(); 
     bw.close(); 
     os.flush(); 
當然

,你還要做適當的異常處理,以確保一切正常關閉。

+0

謝謝!其實我想要做的是發送一個請求到第三部分接口需要參數與gb2312。我永遠不會有一個與gb2312正確的字符串?我怎樣才能實現這個HTTP請求? –

+0

我所描述的任何流作品......在這裏,我用一個FileInputStream和一個FileOutputStream作爲一個例子。它應該與SerlvetIn/Outputstream一樣工作。但是,您還必須瞭解事物的HTTP方面。在任何http請求或響應中,你都應該有一個頭來聲明編碼,因爲根據HTTP標準,否則它會回退到iso-8859-1。那個一般都用不了。所以還是主動加。所以你應該讀一下。 – rmalchow

0
 String gb2312 = new String(str.getBytes("utf-8"), "gb2312"); 

因爲String構造應該採取配套字節數組,字符集這種說法是不正確,你說的字節是UTF-8,但字符集是gb2312