2014-03-06 55 views
0

我想保存在test.properties文件Latin1的字符「ASSO」。 但它存儲像「\ u00C0 \ u00DF \ u00D6」。但我期待商店的確切價值。 儘可能的幫助。如何保存和Java屬性讀取Latin1的charecters文件

+0

這些是確切的Unicode值,如屬性文件標準所要求的。 – bmargulies

+0

是否可以將「ÀßÖ」保存在屬性文件中而不是「\ u00C0 \ u00DF \ u00D6」中? –

回答

1

您可以使用作家使用超載store(Writer,String)方法存儲,但不應該。

的標準方法以保存/加載是通過一個OutputStream/InputStream的。文檔store(OutputStream,String)

這種方法輸出在 同一格式的註釋屬性的鍵和值作爲store(Writer)指定,具有以下 差異:

  • 流是使用ISO 8859寫入-1字符編碼。
  • 字符無法在拉美-1中的註釋寫成爲\ uXXXX爲他們適當的Unicode十六進制值XXXX。
  • 性狀小於\ u0020和比\在屬性鍵或值u007E更大字符寫成爲\ uXXXX爲適當 十六進制值XXXX。

如果你寫使用其他機構的數據則任何應用程序期望標準的形式將失敗,因爲這代碼演示:

Path file = Paths.get("tmp.properties"); 
Properties write = new Properties(); 
write.put("key", "\u00C0\u00DF\u00D6"); 
try (Writer writer = Files.newBufferedWriter(file, StandardCharsets.UTF_8)) { 
    write.store(writer, "demo"); 
} 
Properties read = new Properties(); 
try (InputStream in = Files.newInputStream(file)) { 
    read.load(in); 
} 
if (!write.get("key").equals(read.get("key"))) { 
    throw new IOException("expected: " + write.get("key") + "; got: " 
     + read.get("key")); 
} 

如果逃逸是有問題的,比如JSON考慮使用其他格式 - JSON mandates Unicode

+0

您好我使用jdk1.5您的代碼將爲jdk1.7工作任何解決方案使用jdk1.5 plz 嘗試(作家作家= Files.newBufferedWriter(文件,StandardCharsets.UTF_8)){ write.store(作家,「演示「); } 未在JDK 1.5支承。 –

0

隨着JDK 1.6可以解決使用下面的代碼:

Writer writer = null; 
    try 
    { 

     Properties prop = new Properties(); 
     OutputStream output = null; 

     output = new FileOutputStream("D:\\test1.properties"); 
     // set the properties value 
     prop.setProperty("database", "ÀßÖ"); 
     prop.setProperty("dbuser", "ÀßÖ"); 
     prop.setProperty("dbpassword", "ÀßÖ"); 

     // writer = new OutputStreamWriter(output, "windows-1252"); 
     writer = new OutputStreamWriter(output, "UTF-8"); 
     // writer.append("Text"); 
     prop.store(writer, null); 

    } 
    catch (Exception e) 
    { 
     // errorMessage = e.getMessage(); 
    } 

    finally 
    { 

     try 
     { 
      if (writer != null) 
      { 
       writer.flush(); 
       writer.close(); 
      } 
     } 

     catch (Exception e) 
     { 
     } 
    } 

嘗試讓我知道。

+0

我需要jdk1.5的解決方案 –