2012-05-18 4 views
1

현재 내 모습을 전혀 볼 수 없습니다. 이것은 표준이어야합니다 : XML을 파싱 할 UTF-8 문자가 있습니다. I는 GWTs XmlParser가 이것을 해석하고 이름 노드 값을 출력 할 때 <person><name>Nguyển Thị Ngân</name></person>GWT XMLParser로 구문 분석 한 후 UTF-8 문자가 손상되었습니다.

다음 문자가 손상 :

String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><person><name>Nguyển Thị Ngân</name></person>"; 

Document doc= XMLParser.parse(xml); 

NodeList list = doc.getElementsByTagName("name"); 
for(int i = 0; i < list.getLength(); i++){ 
    System.out.println("XMLParser: " + list.item(i).getFirstChild().getNodeValue()); 
} 
System.out.println("System.out: " + xml); 

출력은 :

여기

은 일례이며

XMLParser: Nguyá»n Thá» Ngân

System.out: <?xml version="1.0" encoding="UTF-8"?><person><name>Nguyển Thị Ngân</name></person>

나는 문자 혼란이 System.out을 통한 인쇄와 아무 관련이 없다고 해석합니다.

여기에서 문제가 될 수있는 것은 무엇입니까?

+0

''-decl을 제거하면 어떻게됩니까? String을 파싱 중이므로 이미 바이트가 아닌 문자로 이루어져 있으므로 인코딩이 필요하지 않습니다. 브라우저 버그 일 수 있습니다. 또한 테스트를 거친 모든 브라우저에서 또는 그 중 한 브라우저에서만 발생합니까? –

+0

비 - 라틴 문자를 유니 코드 이스케이프 코드로 대체 해 보셨습니까? 개발 환경에서 파일을 UTF-8로 저장하고 있는지 다시 확인하십시오. – chooban

+0

@Thomas Broyer : 제거해도 아무런 차이가 없습니다. 지금까지 나는 코드를 GWTTestCase로만 실행했습니다. 나는 당신의 조언을 따르고 프로덕션 모드에서 다른 브라우저에서 그것을 테스트 할 것이다. 월요일에 그렇게 할거야. –

답변

0

문제는 Thomas Broyer가 설명한 것과 같습니다. 원시 XML을 인쇄하는 것이 예상대로 작동하기 때문에 chooban이 말하는 것은 될 수 없습니다. 유니 코드를 XML 이스케이프 코드로 바꿀 수 있습니다.

StringBuilder xmlEscaped = new StringBuilder(); 
for(int i = 0; i < xml.length(); i++) { 
    char c = xml.charAt(i); 
    if (c < 127) { 
    xmlEscaped.append(c); 
    } else { 
    xmlEscaped.append("&#" + ((int) c) + ";"); 
    } 
} 
Document doc = XMLParser.parse(xmlEscaped.toString()); 
+0

Stefan Haustein : 코드가 예상 한 결과를 제공합니다! 고마워요! XMLParser 로직의 일부가 아닌 이유는 UTF-8 문자가 너무 넓게 사용되기 때문입니다. 나는 그것이 'out-of-the-box'에서 작동 할 것으로 기대했을 것이다. –

+0

비 ASCII 문자가 요소 또는 속성 이름에없는 경우에만 작동합니다. – Joey

+0

네, 맞습니다. –

관련 문제