2011-10-04 5 views
3

속성 파일에서 현지화 된 값 (UTF-8 문자열)을 가져 오는 데 문제가 있습니다. 여기
내가 무슨 짓을 ..java.util.properties getProperty 메서드는 UTF-8 문자열에 대해 null을 반환합니다.

//properties file containing 
//name=हिन्दी 
public static void main(String[] args) 
{ 
    File f = new File("path\\to\\properties\\file"); 
    Properties p = new Properties(); 
    try 
    { 
    p.load(new InputStreamReader(new FileInputStream(f),Charset.forName("UTF-8"))); 
    } 
    catch(IOException iox) {} 
    System.out.println(p.getProperty("name")); //outputs null 
    System.out.println(p.toString()); //outputs { name= हिन्दी } 
} 

감사

+0

'Charset'을'FileInputStream'보다는'InputStreamReader'에 넘깁니까? –

+1

속성의 이름 - 값 쌍을 반복하여 내용을 인쇄하는 것을 고려해보십시오. 한 번에 16 진수로 char를 입력하십시오. 펑키 한 일이 있는지보십시오. –

+0

예! 그냥 여기에 오타가 .. 내 실제 코드에서 나는 Charset InputStream에 –

답변

2

마지막 행이 실제로 name= हिन्दी을 출력하는 경우 등록 정보 파일에 키 문자열에 문제가있는 것처럼 보입니다. 아마도 "보이지 않는 공백 문자"를 포함하거나 "이름"의 문자 중 하나는 정규 라틴 문자가 아닌 그와 비슷한 것입니다. 16 진수 편집기에서 속성 파일을 살펴보십시오.

+0

좋습니다. 시도해 보겠습니다. –

+0

예! 이름에 '/ ufeff'가 추가되었습니다. 그러나 어떻게 그리고 왜 이런 일이 일어나고 있습니까? 그것을 고치는 방법! –

+0

파일을 수동으로 편집합니다. 나는 그것이 어떤 소프트웨어에 의해 생성되는지는 모르지만 ... 그 경우에는 소프트웨어에 문제가있다. – helios

0

귀하의 문제가 여기에 있습니다 :

이가 호출

catch(IOException iox) {}

"상호 실패". 절대하지 마. 파일에서 속성을로드하는 코드가 실패하고 예외가 throw되며이 경우에도 알 수 없습니다. e.printStackTrace()을 추가하고 속성 값을 인쇄하는 코드를 try/catch 블록으로 이동하십시오. 예외를 확인하고 버그를 수정하십시오. 파일 경로가 잘못되었으므로 FileNotFoundException이 표시되거나이 파일에 대한 액세스 권한이없는 것 같습니다.

+0

하지만이 경우 마지막 줄에는 아무 것도 출력되지 않습니다. –

관련 문제