【轉】Java IO 讀取文件中的亂碼問題

無論是用字節流仍是字符流,均可以輕鬆的進行文件讀取。固然,它們對亂碼問題的處理方式是不一樣的。 java

1. 字節流 linux

/**  
     * @param args  
     */  
    public static void main(String[] args) {   
        try {   
            InputStream in = new BufferedInputStream(new FileInputStream("D:/temp/a.txt"));   
            int c;             
            StringBuffer sb = new StringBuffer();   
            while ((c = in.read())>0){   
                sb.append((char)c);   
  
            }              
               
            String response = new String(sb.toString().getBytes("iso-8859-1"), "gb2312");   
            System.out.print(response);   
        } catch (FileNotFoundException e) {   
            // TODO Auto-generated catch block   
            e.printStackTrace();   
        } catch (IOException e) {   
            // TODO Auto-generated catch block   
            e.printStackTrace();   
        }   
            
  
    }
處理方法:對讀取到的文件內容進行字符編碼轉換

 

2. 字符流 數據庫

/**  
     * Read file's content  
     *   
     * @param fileAndPath String the file and path  
     * @return String the file's content  
     */  
    public static String readFile (String fileAndPath) {   
        String fileContent = "";   
        File file = new File(fileAndPath);   
        if (file.isFile() && file.exists()) {      
            try {              
               
                InputStreamReader in = new InputStreamReader(new FileInputStream(file), "gb2312");   
                BufferedReader bf = new BufferedReader(in);            
                String temp;   
                while ((temp=bf.readLine()) !=null) {   
                    fileContent += temp+"\n";   
                }   
                bf.close();   
                in.close();                
                   
            }catch (FileNotFoundException e) {                 
                System.out.println("File not found");   
                e.printStackTrace();   
                   
            } catch (IOException e) {   
                System.out.println("Something wrong when reading file");   
                e.printStackTrace();   
            }    
        }              
          
        return fileContent;   
           
    }

處理方法: 讀取文件時,用字符流類InputStreamReader進行編碼轉換 windows

 

3. Linux 平臺下 app

暫時沒有碰到這樣的問題。可是聽說在Linux平臺下,用字符流讀取會有亂碼問題。 編碼

----------------------------------------------------- spa

項目中要求讀取數據文件經過java程序導入數據庫,數據文件是ANSI編碼格式的,在windows環境中沒有什麼問題,windows會自動將編碼轉換成爲gb2312的,可是在linux平臺上因爲多語言,使用InputStreamReader由字節碼轉換爲字符碼的時候會容易產生沒法正確轉換的亂碼,解決方法爲讀取的時候採用iso-8859-1格式讀取,在程序中再次轉碼。 code

   BufferedReader reader = new BufferedReader(new InputStreamReader(
     new FileInputStream(filename),"iso-8859-1"));
get

    String line = reader.readLine(); io

    line = new String("iso-8859-1","gb2312");

相關文章
相關標籤/搜索