2013-08-22 8 views
1

표준이 아닌 문자 (예 : 이상한 "인용 부호")가 포함 된 XML 파일이 있습니다. Java jaxb utf-8/iso 변환

나는 UTF-8/ISO/아스키를 사용하여 XML을 읽을 + 그것은 비 정렬 화 :

BufferedReader br = new BufferedReader(new InputStreamReader(
       (conn.getInputStream()),"ISO-8859-1")); 
     String output; 
     StringBuffer sb = new StringBuffer(); 
     while ((output = br.readLine()) != null) { 
      //fetch XML 
      sb.append(output); 
     } 


     try { 

      jc = JAXBContext.newInstance(ServiceResponse.class); 

      Unmarshaller unmarshaller = jc.createUnmarshaller(); 

      ServiceResponse OWrsp = (ServiceResponse) unmarshaller 
        .unmarshal(new InputSource(new StringReader(sb.toString()))); 

나는 ISO-8859-1 코드를 취할 것 신탁 기능이, 그리고/그들에게 매핑 "문자로 변환 "기호. 즉 : "& # x2019"=> "작은 따옴표 왼쪽"

JAXB 비동기 iso를 사용하면 iso 변환으로 문자를 표시합니다. 즉, 모든 이상한 따옴표는 "& #의 x2019"

나의 문자열을 가정으로 인코딩 될 것입니다 : 10 ~ 11 세 청소년의 클래스 (이상한주의 - 11 년 사이)

jc = JAXBContext.newInstance(ScienceProductBuilderInfoType.class); 
     Marshaller m = jc.createMarshaller(); 
     m.setProperty(Marshaller.JAXB_ENCODING, "ISO-8859-1"); 
     //save a temp file 
     File file2 = new File("tmp.xml"); 

이 파일에 저장됩니다 :

class of 10–11‐year‐olds. (what i want..so file saving works!) 

[보조 노트 : 나는 자바 파일 리더를 사용하여 파일을 읽고, 그것을 밖으로 잘 위의 문자열을두고]

내가 가지고있는 문제가 있다는 것입니다을 jaxb unmarshaller를 사용하는 STRING 표현에 이상한 결과가 발생했습니다. 어떤 이유로 인해 –을 나타내는 문자열을 얻을 수없는 것 같습니다.

때 1 :

class of 10?11?year?olds 

: 2 : 파일 출력 :

class of 10–11‐year‐olds 

내가 심지어 저장된 XML에서 파일을 읽으려고하고 비 정렬 화하여 XML, 비 정렬 화 된 출력을 확인 그 (내 문자열에 –을 얻기를 희망)

String sCurrentLine; 
     BufferedReader br = new BufferedReader(new FileReader("tmp.xml")); 
     StringBuffer sb = new StringBuffer(); 
     while ((sCurrentLine = br.readLine()) != null) { 
      sb.append(sCurrentLine); 
     } 




     ScienceProductBuilderInfoType rsp = (ScienceProductBuilderInfoType) unm 
       .unmarshal(new InputSource(new StringReader(sb.toString()))); 

아무 소용이.

아이디어가 jaxb에서 iso-8859-1 인코딩 된 문자를 가져 오는 방법은 무엇입니까?

+0

가 어떤 소프트웨어는 표시 사용합니까이/비 정렬 화 된 문자열 표현을 볼 유래에 발견이 tibid 코드를 사용하고 계십니까? ("10? 11? year olds"텍스트) – Joni

+0

Eclipse 콘솔. jaxb가 변환하는 이유를 알 수 없습니다 – – nate

+0

System.out을 사용하여 콘솔에 문자열을 어떻게 출력합니까? JAXB는 엔티티 참조를 디코딩합니다. XML 파서가해야 할 일이기 때문에 엔티티 참조를 디코딩하지만, iirc는이를 수행하지 않도록 구성 할 수 있습니다. – Joni

답변

0

는 해결 :

final class HtmlEncoder { 
    private HtmlEncoder() {} 

    public static <T extends Appendable> T escapeNonLatin(CharSequence sequence, 
     T out) throws java.io.IOException { 
    for (int i = 0; i < sequence.length(); i++) { 
     char ch = sequence.charAt(i); 
     if (Character.UnicodeBlock.of(ch) == Character.UnicodeBlock.BASIC_LATIN) { 
     out.append(ch); 
     } else { 
     int codepoint = Character.codePointAt(sequence, i); 
     // handle supplementary range chars 
     i += Character.charCount(codepoint) - 1; 
     // emit entity 
     out.append("&#x"); 
     out.append(Integer.toHexString(codepoint)); 
     out.append(";"); 
     } 
    } 
    return out; 
    } 
} 

HtmlEncoder.escapeNonLatin (mystring에)