2011-07-01 6 views
0

저는 Swing 응용 프로그램과 GlassFish에 배포 된 웹 프로젝트에서 사용되는 Sax 파서 클래스가 있습니다.Xerces Sax2 파서 인코딩 문제

클래스는 xml 파일을 구문 분석합니다. Netbeans IDE Swing 응용 프로그램 (IDE에서)과 웹 프로젝트에서 완벽하게 작동합니다.

하지만 내가 깨끗하게하고 빌드 할 때 하나의 .jar로 응용 프로그램을 돌릴 때 XML 파일에서 ī, ķ, ļ, ā 같은 기호를 더 이상 인식하지 못합니다.

cmd를 통해 컴파일하고 실행하면 동일한 문제가 발생합니다.

Glassfish 구성을 사용하여 정렬 된 웹 프로젝트에서 동일한 문제가있었습니다.

질문은 스윙 앱에서이 문제를 해결하는 방법입니까? setEncoding를() 메소드에서

public void parseDocument(String filePath) { 

    try { 
     XMLReader xr = XMLReaderFactory.createXMLReader(); 
     xr.setContentHandler(this); 
        InputSource is = new InputSource(new FileReader(filePath)); 
        is.setEncoding("UTF-8"); 
     xr.parse(is); 

    }catch(SAXException se) { 
     se.printStackTrace(); 
    }catch (IOException ie) { 
     ie.printStackTrace(); 
    } 
} 

없음 도움 : 여기

코드의 평화입니다.

+0

명령 줄에서 Netbean이 jar을 실행하는 데 사용하는 JVM을 사용할 수 있습니까? 하나의 JVM이 내 코드를 잘 실행하는 동안 문제가 발생하지만 다른 것은 기본 XMLReader 구현으로 인한 것이 아닙니다. 평화! – Alvin

+0

감사합니다. 알빈이 정확한 해결책을 찾아 나에게 보냈습니다. –

+0

@ sergej.art 당신이 대답을 좋아한다면, 그것을 upvote하는 것을 잊지 마시고, 아마도 그것을 받아 들일 것입니다. –

답변

0

내 질문에 답하십시오.

문제는 JVM 설정에있었습니다. 완벽하게

Variable name:JAVA_TOOL_OPTIONS 
Variable value: -Dfile.encoding=UTF8 

작품 :

나는 Windows 시스템 변수에 새로운 변수를 추가했다.

1

이미 질문에 답변했지만 다른 방법은 파일을 열 때 명시 적으로 변환을 설정하는 것입니다.

public void parseDocument(String filePath) { 
    try { 
    XMLReader xr = XMLReaderFactory.createXMLReader(); 
    xr.setContentHandler(this); 
    Reader reader = new InputStreamReader(new FileInputStream(filePath); 
    InputSource is = new InputSource(reader, "UTF-8"); 
    is.setEncoding("UTF-8"); 
    xr.parse(is); 
    }catch(SAXException se) { 
    se.printStackTrace(); 
    }catch (IOException ie) { 
    ie.printStackTrace(); 
    } 
} 

큰이의 차이, 그리고 문제의 솔루션

우리가 FileInputStream에 위에 InputStreamReader 사용하는 것입니다. FileReader에 대한 javadoc에 따르면, 기본 문자 세트를 변경하기 때문에 항상 "기본 문자 세트"로 파일을 열어 솔루션이 작동하는 이유입니다. 파일을 열 때 사용할 문자 집합을 명시 적으로 말하면서 InputStreamReader와 FileInputStream의 조합을 사용해야 할 수도 있습니다.

+0

그게 효과가있어, 고마워! 당신의 추천을 사용할 것입니다. –

+0

@ sergej.art 당신이 대답을 좋아한다면, 그것을 upvote하는 것을 잊지 마시고, 아마도 그것을 받아 들일 것입니다. –