Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino

Zeichensatzcodierung nach DXL Import

(1/2) > >>

Sebastianh:
Hallo,

ich habe ein Dokument aus Notes heraus in ein DXL-File exportiert, und dieses dann wieder importiert. Soweit so gut. Der DXL-File hat auch den wunderbaren Header:

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

--- Ende Code ---

Nur leider werden jetzt im NotesClient (7er) nach dem Import die Sonderzeichen (ä,ü,ö,ß,...) nicht mehr korrekt dargestellt. Ich habe am Importer keine Option gefunden, mit der ich Ihm mitteilen kann, welche Codierung er verwenden soll, und im Client habe ich den Zeichensatz auch auf UTF-8 umgestellt (allerdings erst nach dem Export), trotzdem bekomme ich die Sonderzeichen nicht korrekt angezeigt. Was mache ich falsch?

Gruß,

Sebastian

flaite:
Hatte ich nie Probleme mit. Hast du zufällig die dxl-Datei händisch mit einem Texteditor editiert und abgespeichert? Wenn ja könntest du es mit einem UTF-8 fähigen Texteditor nochmal versuchen (z.B. Textpad).

Sebastianh:
die DXL Dateien werden manuell gar nicht angefasst. Der komplette Prozess läuft vollkommen automatisiert ab. Manueller Zugriff findet erst im Notes Client selber wieder statt. (ok, nicht ganz, der Aufruf der Import-Methode kommt aus einem Webinterface).

flaite:
Mmmh. Du manipulierst das DXL ja wohl automatisiert zwischen Export und re-Import. Vielleicht wird da irgendwas im Encoding geändert, ohne dass du dir darüber so recht im klaren bist. Kannst du vielleicht mal den code posten.
Ich seh weder bei DXLExporter noch bei DXLImporter eine Möglichkeit das Encoding (=Characterset) zu ändern.
Bin aber bisher davon ausgegangen, dass er das automatisch in UTF-8 umwandelt (exporter) und zurück in das Encoding des Dokuments/Design-Elements beim Import.
Ich hab heute leider keine Zeit, das mal kurz ausprobieren. Werd das aber am für mich sehr verlängerten WE machen.
Hatte auf verschiedenen Plattformen öfters Probleme mit dem Encoding. Bei DXL aber seltsamerweise nie. Letzteres kann auch mit Glück zu tun haben. Deshalb interessiert mich das.

Sebastianh:
Import:

--- Code: ---Stream stream = session.createStream();
dxlImporter = session.createDxlImporter();
boolean t1 = stream.open(filename);
if (t1) {
    dxlImporter.setReplaceDbProperties(false);
    dxlImporter.setReplicaRequiredForReplaceOrUpdate(false);
    dxlImporter.setAclImportOption(DxlImporter.DXLIMPORTOPTION_IGNORE);
    dxlImporter.setDesignImportOption(DxlImporter.DXLIMPORTOPTION_CREATE);
    dxlImporter.importDxl(stream, db);
    stream.close();
}

--- Ende Code ---

export:

--- Code: ---filename = "somestring";
DxlExporter dxlExporter = null;
try {
    dxlExporter = session.createDxlExporter();
    dxlExporter.setDoctypeSYSTEM(pfad_zur_dtd);
    String fileLocation = path + File.separator + filename;
    String dxl = dxlExporter.exportDxl(doc);
    File dxldatei = new File(fileLocation + ".dxl");
    FileOutputStream fos = new FileOutputStream(dxldatei);
    fos.write(dxl.getBytes("UTF-8"));
    fos.close();
    checkDXL(fileLocation + ".dxl");
}

--- Ende Code ---
("doc" ist hier vom Typ lotus.domino.Document und wird der Methode direkt übergeben.)

manipulation

--- Code: ---public boolean checkDXL(String filename){
boolean retValue = false;
try{
Document doc = parse(filename);
Element root = doc.getRootElement();

getChildren(root);
OutputFormat format = new OutputFormat("", true, "utf-8");
FileOutputStream fos = new FileOutputStream(filename);
XMLWriter writer = new XMLWriter(fos, format);
writer.write(doc);
               ...
        }
}

--- Ende Code ---
("parse" ist hier nur das einlesen der DXL-Datei mit einem SAX-Parser)

das getchildren ist ziemlich lang, verändert aber eigentlich auch nur Werte innerhalb des bereits geparsten "xml", sollte also nix mehr mit der Codierung am Hut haben.

Danke schonmal :)

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln