Marco: XML in Java String einlesen

Hallo zusammen,

ich stehe vor folgendem Problem:
Ich habe ein XML-Dokument welches unter anderem  ein tag mit einem µ Zeichen enthält (<unit>µg</unit>). Dieses Zeichen möchte ich in Java auslesen um es anschließend in eine Datenbank zu schreiben. Sobald ich das Dokument parse und den Inhalt einem String zuweise wird das µ in ┬Á umgewandelt.
Gibt es eine Möglichkeit diese Umwandlung zu umgehen bzw. sie rückgängig zu machen?

Vielen Dank vorab & Gruß,
Marco

  1. Hallo,

    Ich habe ein XML-Dokument welches unter anderem  ein tag mit einem µ Zeichen enthält (<unit>µg</unit>). Dieses Zeichen möchte ich in Java auslesen um es anschließend in eine Datenbank zu schreiben. Sobald ich das Dokument parse und den Inhalt einem String zuweise wird das µ in ┬Á umgewandelt.

    woher bist Du Dir sicher, dass das Zeichen bei der Stringzuweisung umgewandelt wird. Wie erfolgt denn die Ausgabe und welche Charsets haben die xml-Datei und die Ausgabe?

    Gruß
    Olaf

    1. woher bist Du Dir sicher, dass das Zeichen bei der Stringzuweisung umgewandelt wird. Wie erfolgt denn die Ausgabe und welche Charsets haben die xml-Datei und die Ausgabe?

      Gruß
      Olaf

      Hallo,

      die Datei sieht so aus:
      <?xml version='1.0' encoding='utf-8'?>
      <myDoc>
      ...
      <unit>µg</unit>
      ...
      </myDoc>

      ich lese die Datei wie folgt aus:

      ...
      System.out.println(readFileAsString("c:\myXML.xml"));

      private static String readFileAsString(String filePath) throws java.io.IOException{
              StringBuffer fileData = new StringBuffer(1000);
              BufferedReader reader = new BufferedReader(
                      new FileReader(filePath));
              char[] buf = new char[1024];
              int numRead=0;
              while((numRead=reader.read(buf)) != -1){
                  String readData = String.valueOf(buf, 0, numRead);
                  fileData.append(readData);
                  buf = new char[1024];
              }
              reader.close();
              return fileData.toString();
      }

      Als Ausgabe bekomme ich dann: ... <unit>┬Ág</unit> ...

      1. Hallo Marco,

        leider kann ich nur ein bisschen raten:

        die Datei sieht so aus:
        <?xml version='1.0' encoding='utf-8'?>
        <myDoc>
        ...
        <unit>µg</unit>
        ...
        </myDoc>

        Ich gehe mal davon aus, dass der Editor die Datei auch als utf-8 speichert und nicht als iso-sonstwas.

        Als Ausgabe bekomme ich dann: ... <unit>┬Ág</unit> ...

        Ausgabe wo: Per Swing in einem GUI-Element, per Konsole, auf dem Webbrowser?

        Kann es sein, dass von vorne bis hinten alles utf-8 ist, aber das Ausgabegerät die Ausgabe als 8bit-Zeichensatz interpretiert und ausgibt? Das würde auch erklären, warum aus dem µ zwei Zeichen geworden sind.

        Gruß
        Olaf

        1. Hallo Olaf,

          Kann es sein, dass von vorne bis hinten alles utf-8 ist, aber das Ausgabegerät die Ausgabe als 8bit-Zeichensatz interpretiert und ausgibt? Das würde auch erklären, warum aus dem µ zwei Zeichen geworden sind.

          Das wäre möglich, ist aber eher unwahrscheinlich. Java verwendet für IO standardmäßig den Systemzeichensatz. Das Problem dürfte eher sein, dass dieser eben nicht uft-8 ist und die Zeichen beim Einlesen als iso-* interpretiert werden. Ich würde also mal versuchen beim FileReader die Zeichenkodierung explizit anzugeben.

          Grüße

          Daniel