2010-02-08 2 views
2

XML에서 안전하지 않은 텍스트 (예 : ä, ö 및 å)에 핀란드어 문자가 있습니다.이 목적을위한 라이브러리/프레임 워크가 있습니까?안전하지 않은 문자를 Java의 XML 용 안전 문자로 변환하려면 어떻게해야합니까?

+4

나는이 문자들을 실제로 "안전하지 못함"이라고 생각하지 않습니다. 문자 인코딩은 정확해야하며 XML 선언과 일치해야합니다. –

+1

분명히 내 서블릿 응답에 response.setCharacterEncoding ("UTF-8")이 없습니다. 하지만 그것을 추가 할 때 모든 것이 잘 작동했습니다 ... – newbie

답변

3

XML은 유니 코드를 지원하므로 실제로 이스케이프해야하는 유일한 5 가지 기본 XML 엔터티 (gt, lt, quot, amp, apos)가 있습니다. StringEscapeUtils.escapeXML을 사용하면 모든 ä, ö 및 å을 못생긴 \ uabcd 것으로 바꿀 것입니다.

+0

덧붙여 말하자면, XML 스펙이 인코딩하는 방법에 관계없이 XML 스펙이 불법으로 취급하는 문자가 있습니다. 예를 들어, ASCII NUL 문자. –

2

그래서 XML에 대한 문자열을 ecsape하는 가장 좋은 방법은 가공 랭에서 StringEscapeUtils.escapeXML 이지만, 여기에 누군가가 이미 말했듯이 충분하지 일예이다 유효한 xml을 원한다면 문자열에서 제거해야하는 일부 인쇄 할 수없는 제어 문자가 있습니다.

/** 
* Function to strip control characters from a string. 
* Any character below a space will be stripped from the string. 
* @param iString the input string to be stripped. 
* @return a string containing the characters from iString minus any control characters. 
*/ 
public String stripControlChars(String iString) { 
    StringBuffer result = new StringBuffer(iString); 
    int idx = result.length(); 
    while (idx-- > 0) { 
     if (result.charAt(idx) < 0x20 && result.charAt(idx) != 0x9 && 
       result.charAt(idx) != 0xA && result.charAt(idx) != 0xD) { 
      if (log.isDebugEnabled()) { 
       log.debug("deleted character at: "+idx); 
      } 
      result.deleteCharAt(idx); 
     } 
    } 
    return result.toString(); 
} 

// Then 
String s = org.apache.commons.lang3.StringEscapeUtils.escapeXml(stripControlChars(s)); 

또한 더 다음 필요에 탈출하는 방법의 이전 버전으로 StringEscapeUtils.escapeXML 커먼즈 랭 버전 3을 사용하는 것이 중요합니다 : 내가이 조각을 사용하여이 작업을 수행합니다.

관련 문제