Java中properties文件中的中文亂碼問題

Properties為了方便用戶的配置,用于讀取Java的配置文件,不同的編程語言有自己所支持的配置文件,能讓用戶夠脫離程序本身去修改相關的變量設置,這篇文章主要介紹了Java中properties文件中的中文亂碼問題,需要的朋友可以參考下

Properties類是什么?

Properties(Java.util.Properties),該類主要用于讀取Java的配置文件,不同的編程語言有自己所支持的配置文件,配置文件中很多變量是經常改變的,為了方便用戶的配置,能讓用戶夠脫離程序本身去修改相關的變量設置。就像在Java中,其配置文件常為.properties文件,是以鍵值對的形式進行參數配置的。文章源自四五設計網-http://www.4968ejs.cn/40025.html

Java中properties文件中的中文亂碼問題

問題代碼:文章源自四五設計網-http://www.4968ejs.cn/40025.html

1
2
3
4
5
6
7
8
9
10
11
12
13
// 目標:使用Properties讀取屬性文件中的內容。
????????// 1、創建properties對象
?????????Properties properties = new Properties();
?????????// 2、使用properties對象加載屬性文件中的鍵值對數據。
?????????properties.load(new FileInputStream("day10-special-file-log\\src\\users.properties"));
?????????// 3、確認是否讀取出來了
????????System.out.println(properties);
????????// 4、根據鍵取值
????????String pwd = properties.getProperty("admin");
????????System.out.println(pwd);
????????properties.forEach((k , v) -> {
????????????System.out.println(k + "=" + v);
????????} );

day10-special-file-log\\src\\users.properties文件里面的內容如下:文章源自四五設計網-http://www.4968ejs.cn/40025.html

Java中properties文件中的中文亂碼問題-1文章源自四五設計網-http://www.4968ejs.cn/40025.html

期望輸出應該和上面文件的內容一樣,結果中文內容輸出的是一堆亂碼:?1??????????=minmin?2???¨è?·è?¥=miejue?3?èμμ???=wuji?4?admin=123456文章源自四五設計網-http://www.4968ejs.cn/40025.html

可如果將上面properties.load(new FileInputStream("day10-special-file-log\\src\\users.properties"));換成properties.load(new FileReader("day10-special-file-log\\src\\users.properties"));就能正常輸出中文了,那這是什么原因呢?文章源自四五設計網-http://www.4968ejs.cn/40025.html

其實properties文件中的中文亂碼問題主要有以下幾個原因:文章源自四五設計網-http://www.4968ejs.cn/40025.html

1.properties文件的編碼格式和Java代碼的編碼格式不一致。properties文件默認使用ISO-8859-1編碼,而Java代碼可能使用UTF-8或GBK等編碼。這樣在讀取或寫入properties文件時,就會出現中文字符無法正確解析的情況。文章源自四五設計網-http://www.4968ejs.cn/40025.html

2.properties文件中的中文字符沒有經過轉換。properties文件只能存儲ASCII字符,所以如果要使用中文字符,就需要將其轉換為Unicode編碼。可以使用native2ascii.exe工具或者IDE的插件來實現這個轉換。文章源自四五設計網-http://www.4968ejs.cn/40025.html

3.在Java代碼中指定字符集。在使用FileInputStream或FileWriter等類來讀取或寫入properties文件時,需要指定相應的字符集,例如UTF-8。可以使用InputStreamReader或OutputStreamWriter等類來包裝FileInputStream或FileWriter,并傳入相應的字符集參數。文章源自四五設計網-http://www.4968ejs.cn/40025.html

而properties.load(new FileReader(file))能正常讀取的原因是,FileReader默認使用了與properties文件相同的字符編碼,即UTF-8。這樣就可以正確地解析文件中的中文字符,而不會出現亂碼。

可以使用InputStreamReader或OutputStreamWriter等類來包裝FileInputStream或FileWriter,并傳入相應的字符集參數

示例代碼:

1
2
3
4
5
6
7
// 讀取文件時指定UTF-8編碼
Properties p = new Properties();
p.load(new InputStreamReader(new FileInputStream("config.properties"), "UTF-8"));
// 寫入文件時指定UTF-8編碼
Properties p = new Properties();
p.setProperty("name", "李芳");
p.store(new OutputStreamWriter(new FileOutputStream("config.properties"), "UTF-8"), null);

到此這篇關于Java中properties文件中的中文亂碼問題的文章就介紹到這了

繼續閱讀
我的微信
微信掃一掃
weinxin
我的微信
惠生活福利社
微信掃一掃
weinxin
我的公眾號
 
  • 本文由 四五設計網小助手 發表于 2024年2月20日09:35:15
  • 轉載請務必保留本文鏈接:http://www.4968ejs.cn/40025.html

發表評論

匿名網友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

拖動滑塊以完成驗證