2009-10-29 5 views
0

J'écris un projet avec Batik, qui est pour l'image multi-langue. J'ai donc besoin de signes comme "sigma" ou "alpha". Je dois écrire le caractère en tant que texte - pas comme un polygone ou comme un glyphe - parce qu'il doit être écrit par mon projet à nouveau.Écrire des caractères Unicode avec Batik ne fonctionne pas

Si j'écris un caractère unicode dans mon SVGDocument il apparaît correctement dans le débogueur, mais si j'écris en SVG il y a toujours un ?, ou Lettre normale, comme A, ?A en conséquence.

Je pense que c'est un problème de mon auteur, mais je ne sais pas comment y remédier. Je sais qu'il existe des solutions de SVG comme l'utilisation de l'Unicode avec &#XXX ou σ mais je ne peux pas donner le nœud de cette chaîne et il sera écrit dans le bon format.

Voici court et exemple, espérons-code compréhensible:

enter code here 
import java.io.File; 
import java.io.FileWriter; 
import java.net.URI; 
import org.apache.batik.dom.svg.SAXSVGDocumentFactory; 
import org.apache.batik.dom.util.DOMUtilities; 
import org.apache.batik.util.XMLResourceDescriptor; 
import org.w3c.dom.Document; 
import org.w3c.dom.Text; 
public static void main(String args[]) throws Exception 
{ 
    /* Read Document 
    */ 
    URI source = new URI("file:D:/foo.svg"); 
    //If there is no Parser:'parser' = null 
    String parser = XMLResourceDescriptor.getXMLParserClassName(); 
    //for right interpretation 
    SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser); 
    String sourceUri = source.toString(); 
    /* add Textnode 
    */ 
    Document doc = f.createSVGDocument(sourceUri); 
    String textWithUni = "\u0041"; 
    Text textNode = doc.createTextNode(textWithUni); 
    doc.appendChild(textNode); 
    /*write 
    */ 
    File output = new File("newFoo.svg"); 
    FileWriter fw = new FileWriter(output); 
    DOMUtilities.writeDocument(doc, fw); 
    fw.flush(); 
    fw.close(); 
} 

Répondre

6

Essayez d'écrire le document avec un OutputStreamWriter et en spécifiant le codage de caractères explicitement à quelque chose qui prend en charge unicode:

OutputStream fileOutputStream = new FileOutputStream(svgFile); 
    Writer svgWriter = new OutputStreamWriter(fileOutputStream, "UTF-8"); 
+0

Merci ça marche maintenant, il écrit le signe Unicode en lui.Grand! S'il y a une solution comment je pourrais écrire pense comme & # XXX de Java dans svg m'intéresserait aussi. Mais merci beaucoup pour cette réponse rapide – Luke

+1

Luke, vous devriez ** accepter ** la réponse, pour donner crédit à teabot pour cela. –

Questions connexes