日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 输入输出流 解决中文乱码问题【不一定详细但一定实用篇】【全文4800字】

發布時間:2023/12/31 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 输入输出流 解决中文乱码问题【不一定详细但一定实用篇】【全文4800字】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??在Java IO流的學習過程中,對 txt 形式的文本文件進行寫入/寫出操作時,出現了 中文亂碼 的現象,經過不懈地努力下,查閱相關資料后得以解決。現記錄一下自己的解決過程,希望能幫到大家。

實驗環境:

Netbeans IDE 11.2、JDK1.8等


問題闡述:

剛開始我向文本文件輸入中文時,出現了以下問題:




以下是代碼部分【已加上詳細注釋,若想深入了解 IO機制 ,請查看附錄連接[3]

package AllJavaExperiments; import java.io.*; /**** @author NJUPT_wly*/ public class JavaExperiment_3 {public static void main(String[] args) throws IOException{InputStreamReader isr = new InputStreamReader(System.in); //定義標準輸入流【注:這是“字節”輸入流】BufferedReader bin_1 = new BufferedReader(isr); //獲取緩沖輸入流【注:它是一個裝飾器】//注:將BufferedReader/BufferedWriter與文件流一起使用,可以減少 緩沖區功能匹配CPU 與 I/O的處理速度 的差異File outputFile = new File("C:\\Users\\ASUS\\Desktop\\outTest.txt"); //構造File類實例【接下來就可以對該實例進行相應的操作】FileWriter out = new FileWriter(outputFile); //基于“字符”的輸出操作BufferedWriter bout = new BufferedWriter(out); //獲取緩沖輸出流【注:它是一個裝飾器】String s;System.out.println("-----以下是將要寫入outTest文件的數據:(以單行“#”結束)-----");try{while( (s = bin_1.readLine()) != null ){if( "#".equals(s) )break;//System.out.println(s);bout.write(s);bout.newLine(); //轉到下一行}}catch( IOException e ){ //若輸入有異常,則執行下面一條語句System.out.println("There is a error!");}bin_1.close(); //最先關閉緩沖輸入流isr.close(); //在關閉標準輸入流bout.flush(); //清空緩沖區bout.close(); //關閉緩沖輸出流,釋放和這個流相關的系統資源【】out.close(); //在關閉文件輸出流System.out.println("-----以下是從outTest文件讀出的數據:-----");File fin = new File("C:\\Users\\ASUS\\Desktop\\outTest.txt");FileReader finReader = new FileReader(fin); //基于“字符”的輸入操作BufferedReader bin_2 = new BufferedReader(finReader);String ss;while( (ss = bin_2.readLine()) != null ){System.out.println(ss); //輸出到命令行窗口}bin_2.close(); //依次關閉,注意關閉順序finReader.close();} }




查閱了很多資料后,終于解決了問題:

接下來分別記錄一下:

??1、解決方法

??2、為什么要這樣解決?

-----------------------------------分割線------------------------------------------

1、解決方法:

??只需要在 標準輸入流函數內 增加一個參數 "gbk"即可。

2、為什么要這樣解決?【引用附錄鏈接[2]

??1. 系統的編碼程序的編碼各采用了不同的編碼格式。

??2.通常,假如自己不修改的話,windows自身采用的編碼格式是 gbk(而 gbkgb2312基本上是一樣的編碼方式).

??3.而IDE中默認是 utf-8的編碼,這就是為什么會出現亂碼的原因。

??4.當在OS下手工創建并寫入的txt文件( 編碼形式為gbk),用程序直接去讀( 編碼形式為utf-8),就會出現亂碼。


以下是修改后的代碼:
package AllJavaExperiments; import java.io.*; /**** @author NJUPT_wly*/ public class JavaExperiment_3 {public static void main(String[] args) throws IOException{InputStreamReader isr = new InputStreamReader(System.in,"gbk"); //以“gbk”方式定義標準輸入流【注:這是“字節”輸入流】BufferedReader bin_1 = new BufferedReader(isr); //獲取緩沖輸入流【注:它是一個裝飾器】//注:將BufferedReader/BufferedWriter與文件流一起使用,可以減少 緩沖區功能匹配CPU 與 I/O的處理速度 的差異File outputFile = new File("C:\\Users\\ASUS\\Desktop\\outTest.txt"); //構造File類實例【接下來就可以對該實例進行相應的操作】FileWriter out = new FileWriter(outputFile); //基于“字符”的輸出操作BufferedWriter bout = new BufferedWriter(out); //獲取緩沖輸出流【注:它是一個裝飾器】String s;System.out.println("-----以下是將要寫入outTest文件的數據:(以單行“#”結束)-----");try{while( (s = bin_1.readLine()) != null ){if( "#".equals(s) )break;//System.out.println(s);bout.write(s);bout.newLine(); //轉到下一行}}catch( IOException e ){ //若輸入有異常,則執行下面一條語句System.out.println("There is a error!");}bin_1.close(); //最先關閉緩沖輸入流isr.close(); //在關閉標準輸入流bout.flush(); //清空緩沖區bout.close(); //關閉緩沖輸出流,釋放和這個流相關的系統資源【】out.close(); //在關閉文件輸出流System.out.println("-----以下是從outTest文件讀出的數據:-----");File fin = new File("C:\\Users\\ASUS\\Desktop\\outTest.txt");FileReader finReader = new FileReader(fin); //基于“字符”的輸入操作BufferedReader bin_2 = new BufferedReader(finReader);String ss;while( (ss = bin_2.readLine()) != null ){System.out.println(ss); //輸出到命令行窗口}bin_2.close(); //依次關閉,注意關閉順序finReader.close();} }


運行結果圖片:





參考附錄:

[1] 《ANSI是什么編碼?》【桌面上txt文件默認為ANSI編碼形式,那ANSI是什么呢? 通過這篇文章,你可以比較系統地學習到:各種編碼的由來原理
鏈接: ANSI是什么編碼?.


[2] 《Java讀寫中文文件,解決中文亂碼問題 》【這篇文章就是我在文中所引用的】
鏈接: Java讀寫中文文件,解決中文亂碼問題.


[3] 《深入理解Java中的IO》【通過這篇文章你可以系統地學習Java中的輸入輸出流的原理實現
鏈接: 深入理解Java中的IO.


后記:感謝以上博主。這是小生第一篇博文,疏漏之處還望海涵,煩請指正。

總結

以上是生活随笔為你收集整理的Java 输入输出流 解决中文乱码问题【不一定详细但一定实用篇】【全文4800字】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。