java properties文件轉義字符和中文亂碼解決


properties文件的分隔符是   =或者 :

第一次出現的就是分割符,第二次出現的也不需要轉義,也即是(忽略掉[],只是着重描述字符)

  [\=]     [\:]   或者  [=]  [:]    原封不動即可,但是如果有轉義字符  [\]   則需要轉義 [\\]代替

  另外需要注意下,英文空格也需要轉義也即[ ]前面添加[\]即為[\ ]【注意,如果是value中間的和最后的空格不需要轉義,只是value開頭的需要否則會自動被截斷,換行在最后加\符號

,\必須是最后一個字符這樣才能連接下一行,而且\連接的下一行的開頭的空白符也是會被截斷的】

對於value內的=:,/#;$*~-!%^&<>?這些符號都是不需要轉義的;

有些博客認為這是Properties解析問題,又自行實現個解析,實在是很無所謂

以下為代碼案例:

test.properties里的值

a=1=1==36:2:3
b=2:2:2==3=5
c=\3
d=\\4
e= 5
f=\ 6
以下為測試類

import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class PropertiesTest {
public static void main(String[] args) throws IOException {
Properties properties=new Properties();
properties.load(PropertiesTest.class.getResourceAsStream("test.properties"));
Iterator<Map.Entry<Object,Object>> it=properties.entrySet().iterator();
Map.Entry<Object,Object> entry=null;
while(it.hasNext()){
entry=it.next();
System.out.println("key:"+entry.getKey()+"___value:"+entry.getValue());
}
}
}
最終打印結果:

key:b___value:2:2:2==3=5
key:a___value:1=1==36:2:3
key:f___value: 6
key:e___value:5
key:d___value:\4
key:c___value:3

很明顯,我們看到

e對應的空格因為沒有轉義就不見了

f對應的空格有轉義得以保留

d對應的\有轉義\\得以保留

a b等根本第二個及以后的:或=不影響解析

此外,properties里如果有中文,讀取的時候需要轉換,否則顯示為亂碼,文件本身為UTF-8

String companyName= new String(properties.getProperty("company").getBytes("ISO-8859-1"), "UTF-8");
這樣就可以讀取中文
轉自:https://blog.csdn.net/a1091662876/article/details/73550969,有部分完善


免責聲明!

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



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