解決 properties.getProperty() 字符串中文亂碼的情況


一、情況

程序中通過讀取 properties 配置文件來完成設置參數等功能,但是當配置文件中存在中文時,再通過以下(錯誤示范)代碼進行讀取並取值時,當值為中文時,則中文亂碼(英文等字符不受影響)

// 錯誤示范代碼
Properties properties = new Properties();
InputStream inputStream = TestClass.class.getResourceAsStream("/ScreenShotParams.properties");
properties.load(inputStream);
String saveLocationDir = properties.getProperty("saveLocationDir");

LOGGER.info("saveLocationDir:" + saveLocationDir);

二、分析

InputStream 字節流來讀取中文字符,肯定亂碼啦,改用字符流試試?

三、解決

// 正確代碼
Properties properties = new Properties();
InputStream inputStream = TestClass.class.getResourceAsStream("/ScreenShotParams.properties");
InputStreamReader isr = new InputStreamReader(inputStream, "UTF-8");
BufferedReader br = new BufferedReader(isr);
// 一定一定要 load 設置編碼后的字符流
properties.load(br);
String saveLocationDir = properties.getProperty("saveLocationDir");

LOGGER.info("saveLocationDir:" + saveLocationDir);

按以上正確代碼讀取配置時,仍中文亂碼的情況時

  • 通過記事本等工具檢查並修改配置文件的編碼格式為 UTF-8,然后再在代碼中按照 UTF-8 格式編碼進行讀取

  • 檢查 properties.load() 的參數是否是編碼讀取后的字符流,如果還是 InputStream 字節流時則不會生效,該亂碼還亂碼

四、知識點

  • 雖然 InputStreamReader 也能滿足中文不亂碼的要求,但是還是采用 BufferReader 會更加高效

  • 保證中文不亂碼的前提是:編碼和解碼的格式要保持一致,比如編碼是 UTF-8,則解碼格式也一定要是 UTF-8

  • 在 IDEA 中創建的 properties 后綴名文件,在記事本中查看時,為 ANSI 格式,不過可以通過記事本等工具將文件格式修改為 UTF-8

  • 英文,數字,符號等占用兩個字節,中文占用三個字節


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM