2014-08-29 2 views
0

유로화 기호가 들어있는 특성 파일을 읽었습니다. 완전히 다른 것처럼 보이는 화면에 인쇄 할 때. 나는 소품 파일에서 문자열을 비교하고 equals 메서드를 사용하여 같은 텍스트로 다른 문자열을 선언함으로써 false가되었습니다 .Pls 누군가 나를 도울 수 있습니다.Euro 기호가 properites 파일에서 올바르게 표시되지 않음

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

어떻게 표시 되나요? –

+0

어디서 출력합니까? IDE 콘솔? 쉘? – ortis

답변

4

InputStream 걸리는 Properties.load 방법은 파일이 직접 유로 기호를 나타낼 수 없다 ISO-8859-1 문자 인코딩에 저장되어 있다고 가정한다. 파일이 실제로 UTF-8과 같은 다른 인코딩에 포함되어 있다면 을 대신 사용하는 load 메서드를 사용해야하며 InputStreamReader을 사용하여 올바른 인코딩을 지정해야합니다.

는 다른 방법으로, Properties 파일은 유니 코드 이스케이프 시퀀스를 지원, 그래서 당신은 파일의 \u20ac로 유로 기호를 나타낼 수 있으며, 파일이로드 될 때 그것은 진정한 문자로 디코딩됩니다.

이외에도 현재 코드에는 여러 가지 결함이 있습니다. 가장 중요한 것은 입력 스트림이 속성을로드 한 후 입력 스트림이 올바르게 닫혀 있는지 확인해야한다는 것입니다. 이 작업을 수행하는 가장 쉬운 방법은 "자원 시도"구문

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

및 IT에 낭비 보인다 속성 당신이 그것을에서 값을 요청 매번 파일을 다시로드, 당신은 (단지 한 번로드 고려해 볼 수 있습니다 처음으로 또는 처음으로 요청 됨), 나중에 사용할 수 있도록 Properties 개체를 캐시합니다.

관련 문제