java properties文件轉義字符-中文亂碼

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

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

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

  另外需要注意下,英文空格也需要轉義也即[ ]前面添加[\]即爲[\ ]

有些博客認爲這是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");

這樣就可以讀取中文

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章