2014-08-29 75 views
0

我正在阅读包含€欧元符号的属性文件。当它在屏幕上打印时,看起来完全不同。我比较了来自道具文件的字符串,并通过使用equals方法声明另一个具有相同文本的字符串,它是false.Pls可以有人帮助我。欧元符号显示不正确来自适当的文件

properities file 
your purchase order is € 

string text="your purchase order is €"; 

on comparing the above strings it fails. 

************************ 
public String getProperty(String arg0) { 
     Properties prop = new Properties(); 
     InputStream input = null; 


      try { 
       input = new FileInputStream("C:/text.properties"); 

      } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      try { 

       prop.load(input); 

      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     return prop.getProperty(arg0); 

    } 
+1

它是如何显示的? – 2014-08-29 15:59:10

+0

你在哪里输出它? IDE控制台?贝壳 ? – ortis 2014-08-29 16:06:15

回答

4

Properties.load方法,其采用InputStream假定该文件是保存在ISO-8859-1字符编码,这是不能直接表示欧元符号。如果文件真的采用不同的编码方式,例如UTF-8,那么您应该使用load方法代替Reader,并使用InputStreamReader指定正确的编码。

另外,Properties文件支持Unicode转义序列,这样你就可以代表欧元符号在文件中\u20ac和加载文件时,它会被解码成一个真正的字符。

除此之外,您当前的代码中还存在一些缺陷,最重要的是您需要确保输入流在您从中加载属性后正确关闭。要做到这一点最简单的方法就是“尝试与资源”语法

try(InputStream in = new FileInputStream("C:/text.properties"); 
    InputStreamReader reader = new InputStreamReader(in, "UTF-8")) { 
    prop.load(reader); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

而且似乎浪费重新装入特性文件,你从它要求的值每一次,你可能会考虑加载它只有一次(无论是在前面还是第一次请求时),并缓存对象以备后用。