Properties為了方便用戶的配置,用于讀取Java的配置文件,不同的編程語言有自己所支持的配置文件,能讓用戶夠脫離程序本身去修改相關(guān)的變量設(shè)置,這篇文章主要介紹了Java中properties文件中的中文亂碼問題,需要的朋友可以參考下
Properties類是什么?
Properties(Java.util.Properties),該類主要用于讀取Java的配置文件,不同的編程語言有自己所支持的配置文件,配置文件中很多變量是經(jīng)常改變的,為了方便用戶的配置,能讓用戶夠脫離程序本身去修改相關(guān)的變量設(shè)置。就像在Java中,其配置文件常為.properties文件,是以鍵值對的形式進(jìn)行參數(shù)配置的。文章源自四五設(shè)計網(wǎng)-http://www.133122.cn/40025.html
Java中properties文件中的中文亂碼問題
問題代碼:文章源自四五設(shè)計網(wǎng)-http://www.133122.cn/40025.html
1 2 3 4 5 6 7 8 9 10 11 12 13 | // 目標(biāo):使用Properties讀取屬性文件中的內(nèi)容。????????// 1、創(chuàng)建properties對象?????????Properties properties = new Properties();?????????// 2、使用properties對象加載屬性文件中的鍵值對數(shù)據(jù)。?????????properties.load(new FileInputStream("day10-special-file-log\\src\\users.properties"));?????????// 3、確認(rèn)是否讀取出來了????????System.out.println(properties);????????// 4、根據(jù)鍵取值????????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文件里面的內(nèi)容如下:文章源自四五設(shè)計網(wǎng)-http://www.133122.cn/40025.html
文章源自四五設(shè)計網(wǎng)-http://www.133122.cn/40025.html
期望輸出應(yīng)該和上面文件的內(nèi)容一樣,結(jié)果中文內(nèi)容輸出的是一堆亂碼:?1??????????=minmin?2???¨è?·è?¥=miejue?3?èμμ???=wuji?4?admin=123456文章源自四五設(shè)計網(wǎng)-http://www.133122.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"));就能正常輸出中文了,那這是什么原因呢?文章源自四五設(shè)計網(wǎng)-http://www.133122.cn/40025.html
其實(shí)properties文件中的中文亂碼問題主要有以下幾個原因:文章源自四五設(shè)計網(wǎng)-http://www.133122.cn/40025.html
1.properties文件的編碼格式和Java代碼的編碼格式不一致。properties文件默認(rèn)使用ISO-8859-1編碼,而Java代碼可能使用UTF-8或GBK等編碼。這樣在讀取或?qū)懭雙roperties文件時,就會出現(xiàn)中文字符無法正確解析的情況。文章源自四五設(shè)計網(wǎng)-http://www.133122.cn/40025.html
2.properties文件中的中文字符沒有經(jīng)過轉(zhuǎn)換。properties文件只能存儲ASCII字符,所以如果要使用中文字符,就需要將其轉(zhuǎn)換為Unicode編碼。可以使用native2ascii.exe工具或者IDE的插件來實(shí)現(xiàn)這個轉(zhuǎn)換。文章源自四五設(shè)計網(wǎng)-http://www.133122.cn/40025.html
3.在Java代碼中指定字符集。在使用FileInputStream或FileWriter等類來讀取或?qū)懭雙roperties文件時,需要指定相應(yīng)的字符集,例如UTF-8。可以使用InputStreamReader或OutputStreamWriter等類來包裝FileInputStream或FileWriter,并傳入相應(yīng)的字符集參數(shù)。文章源自四五設(shè)計網(wǎng)-http://www.133122.cn/40025.html
而properties.load(new FileReader(file))能正常讀取的原因是,F(xiàn)ileReader默認(rèn)使用了與properties文件相同的字符編碼,即UTF-8。這樣就可以正確地解析文件中的中文字符,而不會出現(xiàn)亂碼。
可以使用InputStreamReader或OutputStreamWriter等類來包裝FileInputStream或FileWriter,并傳入相應(yīng)的字符集參數(shù)
示例代碼:
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); |
到此這篇關(guān)于Java中properties文件中的中文亂碼問題的文章就介紹到這了



評論