Springboot從配置文件properties讀取字符串亂碼的解決
從配置文件properties讀取字符串亂碼
當(dāng)讀取properties的內(nèi)容為:發(fā)現(xiàn)中文亂碼。原因是由于默認(rèn)讀取的為ISO-8859-1格式,因此需要切換為UTF-8。
主要方式有如下兩種:
方式一
在你的application.properties中增加如下配置,避免中文亂碼
spring.http.encoding.enabled=true
方法二
在你的settings里面的File Encodings進(jìn)行更改為如圖1.1 中紅框。
圖1.1
properties文件的屬性值為中文,讀取時亂碼
我們在開發(fā)中使用properties文件時,常會遇到這樣的問題,比如說:
test.property.value=中文值
我們想把屬性值設(shè)置成中文,這樣無論使用@value還是直接讀取出來會出現(xiàn)亂碼,總結(jié)了兩種解決方案如下:
把屬性值直接轉(zhuǎn)成unicode編碼
寫在文件中,如:
test.property.value.unicode=\u4e2d\u6587\u503c
在方法中轉(zhuǎn)碼
如下面代碼中的getChinese()方法
package com.xiaobai.util; import lombok.extern.slf4j.Slf4j; import java.io.UnsupportedEncodingException; import java.util.PropertyResourceBundle; import java.util.ResourceBundle; @Slf4j public class PropertiesUtil { protected static ResourceBundle erpResponse; protected static final String PROPERTIES_FILE = "propertytest"; static { try { erpResponse = PropertyResourceBundle.getBundle(PROPERTIES_FILE); } catch (Exception e) { log.error(PROPERTIES_FILE + "配置文件加載失敗。", e); } } public static String get(String key) { return erpResponse.getString(key); } public static String getChinese(String key) { String string = null; try { string = new String(erpResponse.getString(key).getBytes("ISO-8859-1"), "utf-8"); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); } return string; } public static void main(String[] args) { //屬性值直接寫成中文,打印出來的結(jié)果:??-??? System.out.println(get("test.property.value")); //解決方案一,使用轉(zhuǎn)碼的方式,打印結(jié)果:中文值 System.out.println(getChinese("test.property.value")); //解決方案二,properties文件中的屬性值寫成unicode(\u4e2d\u6587\u503c),打印結(jié)果:中文值 System.out.println(get("test.property.value.unicode")); } }
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot 并發(fā)登錄人數(shù)控制的實(shí)現(xiàn)方法
這篇文章主要介紹了SpringBoot 并發(fā)登錄人數(shù)控制的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Redisson分布式閉鎖RCountDownLatch的使用詳細(xì)講解
分布式鎖和我們java基礎(chǔ)中學(xué)習(xí)到的synchronized略有不同,synchronized中我們的鎖是個對象,當(dāng)前系統(tǒng)部署在不同的服務(wù)實(shí)例上,單純使用synchronized或者lock已經(jīng)無法滿足對庫存一致性的判斷。本次主要講解基于rediss實(shí)現(xiàn)的分布式鎖2023-02-02gRPC實(shí)踐之proto及Maven插件概念及使用詳解
這篇文章主要為大家介紹了gRPC實(shí)踐之proto及Maven插件概念及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Java劍指offer之刪除鏈表的節(jié)點(diǎn)
這篇文章主要介紹了Java劍指offer之刪除鏈表的節(jié)點(diǎn),給定單向鏈表的頭指針和一個要刪除的節(jié)點(diǎn)的值,定義一個函數(shù)刪除該節(jié)點(diǎn)。返回刪除后的鏈表的頭節(jié)點(diǎn),下文更多相關(guān)內(nèi)容介紹,需要的小伙伴可以參考一下2022-04-04使用Java實(shí)現(xiàn)動態(tài)生成MySQL數(shù)據(jù)庫
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)動態(tài)生成MySQL數(shù)據(jù)庫,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02