J'écris une classe Xml Tag Renamer
avec Java qui lit dans un fichier XML, renomme les étiquettes et les réécrit dans un autre fichier XML en utilisant DocumentBuilderFactory
et TransformerFactory
(les nœuds de texte sont conservés). Cela fonctionnait bien avant avec les textes allemands et anglais, jusqu'à aujourd'hui, quand j'ai essayé de renommer un fichier XML avec du texte russe. Au lieu des textes sources, j'ai obtenu ?????
dans le fichier XML nouvellement créé. J'ai essayé de réglage EncodageÉcriture du russe en XML
Une idée de comment corriger cela?
PS. Les chaînes étaient correctes avant d'entrer dans TransformerFactory, car j'ai vérifié dans le débogueur. J'ai essayé de définir OutputKeys.ENCODING
à UTF-8
et ISO-8859-5
. Aucun d'eux n'a aidé.
La partie du transformateur:
// Output the XML
// Set up a transformer
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
// Fix to a bug about indent in transformer
transformer.setOutputProperty
("{http://xml.apache.org/xslt}indent-amount", "4");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
// TODO encoding parameter
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
// Create string from xml tree
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
transformer.transform(source, result);
String xmlString = sw.toString();
xmlString.replaceAll("\n", System.getProperty("line.separator"));
// Write to file
BufferedWriter output = new BufferedWriter(new FileWriter(outputPath));
output.write(xmlString);
output.close();
Merci! Cela fonctionne avec votre code! J'ai légèrement modifié le mien, et il semble que la clé repose sur 'OutputStreamWriter'. Le problème est probablement celui avec 'FileWriter'" Les constructeurs de cette classe supposent que le codage de caractères par défaut et la taille de tampon d'octets par défaut sont acceptables. "(JavaDoc), et' OutputStreamWriter' supporte le codage personnalisé. Encore une fois apprécié! –