2016-11-11 10 views
0

나는이 코드를 가지고 있고, 동시에 "prueba3.xml"을 쓰고 싶다. 파일은 UTF8이지만, 파일을 쓰면 인코딩이 바뀌고 이상한 문자가 표시된다. format.setEncoding("UTF-8") , 올바르게 작동하지 않습니다. jdom SAXBuilder을 사용하여 출력 인코딩을 UTF8로 변경할 수 있습니까?Jdom을 사용하여 XML 읽기 및 쓰기의 출력 코딩을 동시에 변경하는 방법은 무엇입니까?

입력 XML은 :

public static void main(String[] args) throws FileNotFoundException, JDOMException, IOException 
{ 
    //Se crea un SAXBuilder para poder parsear el archivo 
    File xml = new File("c:\\prueba3.xml"); 
    Document doc = (Document) new SAXBuilder().build(xml); 

    Element raiz = doc.getRootElement(); 
    //Recorremos los hijos de la etiqueta raíz 
    List articleRow = raiz.getChildren("reg"); 

    for (int i = 0; i < articleRow.size(); i++) { 

     Element row = (Element) articleRow.get(i); 
     List images = row.getChildren("dato"); 

     for (int j = 0; j < images.size(); j++) { 

      Element row2 = (Element) images.get(j); 
      String texto = row2.getAttributeValue("desc") ; 
      String id = row2.getAttributeValue("id"); 

        if ((texto != null) && (texto !="") && (id.equals("1"))){ 
        row2.getAttribute("desc").setValue("Raúl").toString(); 
        } 
     } 

     Format format = Format.getRawFormat(); 
     format.setEncoding("UTF-8"); 
     XMLOutputter xmlOutput = new XMLOutputter(format); 
     xmlOutput = new XMLOutputter(format); 
     xmlOutput.output(doc, new FileWriter("c:\\prueba3.xml")); 
    } 

    System.out.println("fin"); 
} 

출력 XML : : 시간에 대한

<?xml version="1.0" encoding="UTF-8"?> 
<prueba> 
    <reg id="576340"> 
     <dato cant="856" id="6" val="-1" num="" desc="s" /> 
     <dato cant="680" id="1" val="-1" num="" desc="Ra/> 
     <dato cant="684" id="5" val="-1" num="" desc="..?? ? ??????" /> 
     <dato cant="1621" id="1" val="-1" num="" desc="Ra/> 
     <dato cant="1625" id="5" val="-1" num="" desc="Hola" /> 
</reg> 
</prueba> 

인사와 감사

<?xml version="1.0" encoding="UTF-8"?> 
<prueba> 
    <reg id="576340"> 
     <dato cant="856" id="6" val="-1" num="" desc="ñápás" /> 
     <dato cant="680" id="1" val="-1" num="" desc="résd" /> 
     <dato cant="684" id="5" val="-1" num="" desc="..да и вообем" /> 
     <dato cant="1621" id="1" val="-1" num="" desc="hi" /> 
     <dato cant="1625" id="5" val="-1" num="" desc="Hola" /> 
    </reg> 
</prueba> 

이 코드입니다.

답변

0

JDOM을 사용할 때 특히 비 라틴어 알파벳이있는 국가/지역에서 자주 발생하는 문제입니다. 어떤면에서는 JDOM에서 Writer 출력을 사용하는 것을 유감스럽게 생각합니다. http://www.jdom.org/docs/apidocs/org/jdom2/output/XMLOutputter.html

문제는 FileWriter가 기본 바이트 데이터에 작가로 변환하는 시스템의 기본 인코딩을 사용한다는 것입니다 :

너무 XMLOutputter를에의 JavaDoc을 참조하십시오. JDOM은 해당 변환을 제어 할 수 없습니다. 당신은 코드의 라인을 변경하는 경우

:

xmlOutput.output(doc, new FileWriter("c:\\prueba3.xml")); 

OutputStream 대신 Writer (A)의 사용하기 :

try (OutputStream fos = new FileOutputStream("c:\\prueba3.xml")) { 
    xmlOutput.output(doc, fos); 
} 

이 ... 그것은 바이트로 출력을 사용합니다 시스템의 기본 인코딩이 출력을 방해하지 않습니다.

(추신 : 두 번 xmlOutput 인스턴스를 할당 할 이유가 없습니다.)

+0

안녕, 덕분에 많이, 지금은 당신이 XD 나에게 그것을 설명하는 간단한 지금 보인다, 올바르게 작동합니다. 인사말. –