讀取 properties 配置文件含有中文的value內容 導致中文亂碼 的解決辦法


1.前言

因為裝系統的時候把中文寫在了系統路徑,現在我想把這個路徑寫在properties里面來讀取,可是

發現java 讀取會導致中文亂碼成 問號????的亂碼  ,百度找了好多博客,基本都是一摸一樣的抄襲,估計能不能用都不知道就復制上去了,

沒良心的帖子。

2.追擊原因

查找原因,是因為Java以二進制流的方式讀取properties ,導致無法識別中文,

網上有兩種的解決思路:

方法一是讀取的時候以 文件讀取方式 new InputStreamReade 來讀取並設定編碼格式 , 就像這樣,

 

 

 

,經測試,失敗,中文仍然是問號來替代。

方法二是 在properties配置文件里,不直接寫中文,而是以其他編碼格式替代 ,可以使用 native2ascii.exe 來將配置文件轉換 。

缺點:可是這有可能影響開發的效率,在中文數據比較少的的時候,沒必要這樣殺雞用牛刀 ,不然每次測試都需要將整個文件重新編碼再替代,太慢了!!!!

3.我的解決方式

知道原理,解決起來就有思路了,既然這樣,那我每次將有中文的數據都裝成unicode編碼再放入properties文件里面,像這樣

 

 

 ,再需要的地方再將Unicode編碼轉成utf-8即可

 

 

 我集成了個工具【點擊查看】

 1 package cn.cen2guo.clinic.util;
 2 
 3 public class Unicode {
 4     /**
 5      * 字符串轉unicode, 【properties文件專用】
 6      */
 7     public static String stringToUnicode(String str) {
 8         StringBuilder sb = new StringBuilder();
 9         char[] c = str.toCharArray();
10         for (char value : c) {
11             sb.append("\\").append("\\u").append(Integer.toHexString(value));
12         }
13         return sb.toString();
14     }
15 
16     /**
17      * 字符串轉unicode, 【java 正常使用】
18      */
19     public static String stringToUnicode2(String str) {
20         StringBuilder sb = new StringBuilder();
21         char[] c = str.toCharArray();
22         for (char value : c) {
23             sb.append("\\u").append(Integer.toHexString(value));
24         }
25         return sb.toString();
26     }
27 
28     /**
29      * unicode轉字符串
30      */
31     public static String unicodeToString(String unicode) {
32         StringBuilder sb = new StringBuilder();
33         String[] hex = unicode.split("\\\\u");
34         for (int i = 1; i < hex.length; i++) {
35             int index = Integer.parseInt(hex[i], 16);
36             sb.append((char) index);
37         }
38         return sb.toString();
39     }
40 
41 }
Unicode.class

 

怎么使用呢?看測試

 

4.測試

 

 

 

 

5.注意

之所以有 properties文件專用 的方法,是因為properties文件里 符號 \ 必須要被另一個  \ 注解才可以視為字符串 ,為了方便

 

 

將編碼好的數據直接放到properties 文件里 ,才這樣做 ,不然得手動加  。

properties 取出數據后 前面得 \ 會自動去掉得 ,因此 正常 將unicode 轉 utf-8 即可。

 


免責聲明!

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



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