2012-10-12 4 views
1

중국어 내용이 포함 된 XML 파일이 있습니다. 그러나 표시하는 동안 나는 물음표를 얻고있다. 누군가이 문제를 조사 할 수 있습니까?중국어 내용이 포함 된 XML 파일을 구문 분석 할 수 없습니다.

내 book.xml :

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<book> 
    <person> 
    <first>密码</first> 
    <last>Pai</last> 
    <age>22</age> 
    </person> 
</book> 

그리고 내 코드입니다 : 내가 ??을 얻고 그 후

public static void main (String argv []){ 
    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
    Document doc = docBuilder.parse (new File("book.xml")); 
    String strDoc=getStringFromDocument(doc); 
    System.out.println(strDoc); 
} 

public static String getStringFromDocument(Document doc) { 
TransformerFactory transfac = TransformerFactory.newInstance(); 
Transformer trans = transfac.newTransformer(); 
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); 
trans.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); 
trans.setOutputProperty(OutputKeys.INDENT, "yes"); 
StringWriter sw = new StringWriter(); 
StreamResult result = new StreamResult(sw); 
DOMSource source = new DOMSource(doc); 
trans.transform(source, result); 
String xmlString = sw.toString(); 
return xmlString.toString(); 
} 

:

<?xml version="1.0" encoding="UTF-8"?> 
    <book> 
    <person> 
     <first>??</first> 
     <last>Pai</last> 
     <age>22</age> 
    </person> 

답변

3

귀하의 코드 내 시스템에 잘 실행됩니다. 중국어 문자로 books.xml을 만들고 시스템에 코드를 실행하여 올바른 결과를 얻을 수있었습니다.

[업데이트]

는 이전에 나는 당신의 Books.xml 파일이 용의자라고 생각 -하지만 난 마침내 -Dfile.encoding = ISO-8859-1을 설정하여 내 시스템에 문제를 재현 할 수 있었다.

사용자 환경의 다른 곳에서 문자 인코딩 설정이 잘못되었습니다. 아마도 JVM에서, 아마도 캐릭터를 표시하고있는 콘솔에서.

System.out.println(strDoc); 

System.out.write(strDoc.getBytes("UTF-8")); 

에이 또는 당신이 무엇을 수정하지 않을 수 있습니다 :

한 가지 방법은 당신이 UTF-8로 인코딩 된 바이트 스트림로 문자열을 작성하도록하는 것은 변경하는 것입니다 화면에서 볼 수 있습니다. 또한 UTF-8로 인코딩 된 데이터를 제대로 처리 할 수 ​​있도록 콘솔을 구성해야합니다. 그러나이 바이트를 파일이나 소켓에 쓰면 원래 파일의 바이트와 일치하는지 확인할 수 있어야합니다.

+0

여기서 -Dfile.encoding = ISO-8859-1을 설정해야합니까? – Peter

+0

환경에 따라 다릅니다. 명령에서 "java ..."를 "java -Dfile.encoding = ISO-8859-1 ..."으로 바꿉니다. IDE를 사용하여 IDE의 지침을 따르고 디버깅 할 때 "VM options"또는 "VM arguments"를 지정하는 위치에 IDE를 추가하십시오. –