2015-05-26 46 views
2

因此,我正在研究一個本地化示例以及與ResourceBundle一起使用的一般方法,並且所有內容都不支持UTF-8,因此我正在轉向Properties屬性文件中的Java西班牙編碼

我已經得到它的實際屬性很好,但在西班牙文件,它不喜歡的口音。我用UTF-8閱讀它,但它並不在意,只是顯示與以前不同的符號。

輸出:

íHola! 
┐C¾mo estßs? 
íAdi¾s! 

預期輸出:

¡Hola! 
¿Cómo estás? 
¡Adios! 

屬性文件:

greetings = ¡Hola! 
farewell = ¡Adiós! 
inquiry = ¿Cómo estás? 

代碼:

import java.util.*; 
import java.io.*; 

public class Test{ 

    public static void main(String[] args) throws IOException { 
     String language; 
     String country; 

     if (args.length != 2) { 
      language = new String("en"); 
      country = new String("GB"); 
     } else { 
      language = new String(args[0]); 
      country = new String(args[1]); 
     } 

     String file = String.format("lang_%s_%s.properties",language,country); 

     InputStream utf8in = Test.class.getClassLoader().getResourceAsStream(file); 
     Reader reader = new InputStreamReader(utf8in, "UTF-8"); 
     Properties props = new Properties(); 
     props.load(reader); 

     System.out.println(props.getProperty("greetings")); 
     System.out.println(props.getProperty("inquiry")); 
     System.out.println(props.getProperty("farewell")); 
    } 

} 

我剛剛花了約40分鐘時間閱讀了所有我能找到和他們要麼完全一樣的東西我現在已經或略有不同了,並試圖時,產生相同的結果。

有人可以告訴我如何得到我的預期產出?

+0

我能夠重現它。它在Eclipse中使用UTF-8控制檯設置正常工作。不幸的是,我無法想出將Windows控制檯更改爲UTF-8的方法。有趣的是「System.console()。writer()。println(props.getProperty(」greetings「));」在Windows控制檯上正常工作。也許這有幫助 – Slettal

+0

我在Eclipse中使用UTF-8控制檯設置嘗試了它,並且它顯示了小的黑色鑽石而不是字符。命令提示符可以改變運行一個命令,但它可能並不總是工作。另外它需要你改變字體。我將不得不看看這個片段。 – Spedwards

回答

0

在Eclipse中,我可以重現這個問題。下面是步驟:

  1. 創建Java項目,並設置文本文件編碼CP850
  2. 創建運行/調試配置,設置VM參數-Dfile.encoding=ISO8859-1。 確認編碼常用選項卡中的設置爲CP850;
  3. 運行java程序。

當java程序打印到標準輸出時,那些字符變成ISO8859-1字節。 使用CP850對這些字節進行重新編碼,並在控制檯視圖中顯示。

這是一個配置問題。確保編碼與運行程序的file.encoding相同。