SAX Parsing - Umlaute/Sonderzeichen

Unique86

Mitglied
Hallo zusammen,

ich habe ein Problem mit Umlauten bzw. Sonderzeichen während des SAX Parsings.
Die Umlaute/Sonderzeichen werden mit nach dem parsen nicht korrekt ausgegeben obwohl die xml Datei folgendenen Header aufweist.

Code:
<?xml version="1.0" encoding="UTF-8"?>

Da ich unter Eclipse arbeite, habe ich auch unter den Properties geschaut ob die Datei <name>.xml wirklich als UTF-8 abgespeichert wurde - ja sie wurde.

Nun zum Code ...

Java:
public void parseFile(File file)
  {    
    SAXParserFactory factory = SAXParserFactory.newInstance();
    factory.setNamespaceAware(true);
    
    try
    {
      SAXParser saxParser = factory.newSAXParser();     
      saxParser.parse(file, this);
    }
    catch (FileNotFoundException fne)
    {
      System.out.println("File not found, please specify one!");
    }
    catch (Throwable t)
    {
      t.printStackTrace();
    }
  }

Die obige Methode, rennt über eine bestimmte XML Datei.

Gesagt sei an dieser Stelle, das meine Klasse von
Code:
DefaultHandler
erbt.

Wenn ich nun ...

Java:
public void startElement(String namespaceURI, String lName, String qName, Attributes attrs)
      throws SAXException
  {
    if (lName.equals("element"))
    {
      String name = attrs.getValue(0);
      String value = attrs.getValue(1);

      System.out.println(name + " = " + value);
    }
  }

... mit dieser Methode die Sachen (name, value) ausgebe, erscheinen keine Umlaute sondern sowas wie

Code:
ä oder ü

Ich weiß net wie ich das lösen kann. Normalerweise muss doch der SAX Parser anhand des UTF-8 erkennen, das er die Umlaute richtig darstellen kann o. irre ich da?

Hier mal eine Bsp. XML dazu ...

HTML:
<?xml version="1.0" encoding="UTF-8"?>

<elements>
    <element name="UE" value="Ü" />
    <element name="AE" value="Ä" />
    <element name="OE" value="Ö" />
</elements>

Gruß Sven
 
Zuletzt bearbeitet:
Hallo,

Das Encoding des Dokuments muss natürlich auch zu den verwendeten Zeichen passen.
XML:
<?xml version="1.0" encoding="ISO-8859-15"?>

<elements>
    <element name="UE" value="Ü" />
    <element name="AE" value="Ä" />
    <element name="OE" value="Ö" />
</elements>

Java:
/**
 * 
 */
package de.tutorials;

import java.io.File;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

/**
 * @author thomas.darimont
 *
 */
public class XmlSaxExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
        SAXParserFactory.newInstance().newSAXParser().parse(new File("d:/test.xml"), new DefaultHandler(){
            @Override
            public void startElement(String uri, String localName, String name,
                    Attributes attributes) throws SAXException {
                System.out.println(attributes.getValue("name") +" -> " + attributes.getValue("value"));
            }
        });
    }
}

Ausgabe:
Code:
null -> null
UE -> Ü
AE -> Ä
OE -> Ö

Gruß Tom
 
Zuletzt bearbeitet von einem Moderator:
Hallo Tom,

danke für die Antwort aber UTF-8 würde doch durchaus auch die Umlaute ersetzen o. irre ich mich da ?

Gruß Sven
 
Hallo,

ja schon, dann musst du das XML Dokument auch erstmal mit dem entsprechenden Encoding erzeugen:
Java:
/**
 * 
 */
package de.tutorials;

import java.io.File;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

/**
 * @author Tom
 */
public class XMLExample {

  /**
   * @param args
   */
  public static void main(String[] args) throws Exception {
    Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
    Element element = document.createElement("root");
    element.setAttribute("bubu", "ÄÖÜ߀");
    document.appendChild(element);

    TransformerFactory.newInstance().newTransformer().transform(new DOMSource(document),
      new StreamResult(new File("c:/bubu.xml")));
    
    SAXParserFactory.newInstance().newSAXParser().parse(new File("c:/bubu.xml"), new DefaultHandler(){
      @Override
      public void startElement(String uri, String localName, String name, Attributes attributes)
        throws SAXException {
        System.out.println("bubu -> " + attributes.getValue("bubu"));
      }
    });
  }
}

Erzeugt:
XML:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><root bubu="ÄÖÜ߀"/>

Ausgabe:
Code:
bubu -> ÄÖÜ߀
Gruß Tom
 
Zuletzt bearbeitet von einem Moderator:
Zurück