java 中的亂碼問題匯總及解決方案_java

來源:互聯網
上載者:User

java中的亂碼問題

       最近做項目經常會遇到Java中的亂碼問題,於是就抽時間整理下出現亂碼問題的情況和如何處理,這裡做了一個整理,

分析

編碼與解碼

    編碼就是將字元轉為位元組,解碼就是就是將位元組轉換為字元。

位元組流與字元流

    對檔案的讀寫操作都是通過位元組流來實現的,即使JAVA中有字元流,但是其底層仍然使用的位元組流。

亂碼問題出現

    java中使用最頻繁的是字元,當我們將檔案讀入記憶體並在控制台顯示時(位元組流--->字元流),就需要用到解碼。如果檔案是UTF-8編碼,而我們解碼時錯用成GBK(如果不指定編碼,JAVA會採取系統預設編碼)來解碼,那麼只能顯示亂碼。而我們寫檔案時,最好指定編碼(UTF-8)。

解決方案

樣本1 

   將位元組流轉換為字元流時,我們指定編碼格式。這是我們檔案也應該是gb2312編碼

public static String read(String filename) throws Exception {    InputStream is = new FileInputStream(filename);    BufferedReader in = new BufferedReader(new InputStreamReader(is,        "gb2312"));           //指定編碼格式    String s;    StringBuilder sb = new StringBuilder();    while ((s = in.readLine()) != null) {      sb.append(s + "\n");    }    in.close();    return sb.toString();}

樣本2

  直接通過位元組流讀入,使用String轉換為字元時,指定編碼。

package com.dy.xidian;import java.io.FileInputStream;import java.io.InputStream;class BufferedInputFile {  public static String read(String filename) throws Exception {    @SuppressWarnings("resource")    InputStream is = new FileInputStream(filename);    byte[] b = new byte[1024];    is.read(b);    return new String(b, "gb2312");  }}public class MemoryInput {  public static void main(String[] args) throws Exception {    String filename = "E:/html/gb2312.php";    String s = BufferedInputFile.read(filename);    System.out.println(s);  }}

 陷阱

   I/O操作中有個FileReader類,這個類隱藏了位元組流轉為字元流的細節,我們可以這樣使用。 BufferedReader in = new BufferedReader(new FileReader(filename)); 這樣,我們直接得到就是字元流了。但我們發現,我們並沒有去設定編碼,這是因為FileReader中採用了預設編碼方式。這就變得很危險了,如果其預設的編碼格式和我們檔案的編碼不同,那麼讀出來的資料一定是亂碼。所以我們最好採用樣本中的方式來進行流的轉換。

 感謝閱讀,希望能協助到大家,謝謝大家對本站的支援!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.