解決Java中properties文件編碼問題
1、properties文件顯示亂碼問題
原因是因?yàn)閜roperties默認(rèn)使用ASCII碼,就算在文件中填寫了中文,再打開后依然會(huì)轉(zhuǎn)換成ASCII碼的形式。
首先確定properties配置文件的編碼格式,通常情況下properties的默認(rèn)編碼格式為ISO-8859-1。
更改properties的編碼格式為UTF-8:
IDEA:設(shè)置->文件編碼

eclipse:右鍵該文件->properties
這里不但設(shè)置了編碼格式為UTF-8,旁邊還有Transparent native-to-ascii conversion選項(xiàng)(eclipse里面沒有),這個(gè)東西有啥作用呢
2、讀取properties文件亂碼
設(shè)置完properties文件編碼格式為UTF-8后,一般我們通過字節(jié)流讀取properties文件的方式會(huì)亂碼:
public void TestProp1() throws IOException {
Properties properties = new Properties();
InputStream in = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("application.properties");
properties.load(in);
System.out.println(properties.getProperty("yaml.name"));
}
解決辦法就是通過字符流的方式讀取properties文件:
public void TestProp() throws IOException {
Properties properties = new Properties();
InputStream in = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("application.properties");
properties.load(new InputStreamReader(in, "UTF-8"));
System.out.println(properties.getProperty("yaml.name"));
}
3、Spring boot的@ConfigurationProperties讀取properties文件亂碼
方法一
使用yml文件
方法二
設(shè)置Transparent native-to-ascii conversion也就是上述圖片上屬性文件的配置勾選自動(dòng)轉(zhuǎn)換成ASCII,但顯示原生的內(nèi)容。
在IDEA勾選這個(gè)選項(xiàng)的作用就是:顯示為UTF-8格式,但是運(yùn)行時(shí)轉(zhuǎn)換成ASCII的形式,實(shí)際上使用的是native2ascii.exe來進(jìn)行轉(zhuǎn)換。
運(yùn)行時(shí)顯示如下圖:

方法三
添加注解@PropertySource并聲明encoding=“UTF-8”
//加注解
@Component
@ConfigurationProperties(prefix = "yaml")
@PropertySource(value = {"classpath:yaml.properties"}, encoding = "UTF-8")
注意:這種方法只能對(duì)自定義的properties文件有效,對(duì)于spring boot默認(rèn)生成的application.properties沒有效果
總結(jié)
到此這篇關(guān)于解決Java中properties文件編碼問題的文章就介紹到這了,更多相關(guān)Java properties編碼問題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)添加,讀取和刪除Excel圖片的方法詳解
本文介紹在Java程序中如何添加圖片到excel表格,以及如何讀取、刪除excel表格中已有的圖片。文中的示例代碼講解詳細(xì),感興趣的可以學(xué)習(xí)一下2022-05-05
java 數(shù)據(jù)結(jié)構(gòu)基本算法希爾排序
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)基本算法希爾排序的相關(guān)資料,需要的朋友可以參考下2017-08-08
SpringBoot集成Redis數(shù)據(jù)庫,實(shí)現(xiàn)緩存管理
SpringBoot2 版本,支持的組件越來越豐富,對(duì)Redis的支持不僅僅是擴(kuò)展了API,更是替換掉底層Jedis的依賴,換成Lettuce。 本案例需要本地安裝一臺(tái)Redis數(shù)據(jù)庫。下面就來看下集成Redis的步驟2021-06-06
基于Mybatis實(shí)現(xiàn)CRUD操作過程解析(xml方式)
這篇文章主要介紹了基于Mybatis實(shí)現(xiàn)CRUD操作過程解析(xml方式),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
Java并發(fā)之synchronized實(shí)現(xiàn)原理深入理解
這篇文章主要介紹了Java中synchronized實(shí)現(xiàn)原理詳解,涉及synchronized實(shí)現(xiàn)同步的基礎(chǔ),Java對(duì)象頭,Monitor,Mark Word,鎖優(yōu)化,自旋鎖等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下2021-08-08
Java超詳細(xì)講解設(shè)計(jì)模式中的命令模式
命令模式是將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,從而可用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化,對(duì)請(qǐng)求排隊(duì)或者對(duì)請(qǐng)求做日志記錄,以及可以支持撤銷的操作2022-04-04

