2009-10-29 1 views
0

Я пишу проект с Batik, который предназначен для многоязычного изображения. Поэтому мне нужны такие знаки, как «сигма» или «альфа». Я должен написать символ как текст, а не как многоугольник или глиф, потому что он должен быть снова написан моим проектом.Написание символов Unicode с помощью Batik не работает

Если я пишу Юникод символ в моей SVGDocument он правильно отображается в отладчике, но если я пишу SVG всегда есть ?, или для нормального Письма, таких как A, ?A в качестве результата.

Я думаю, это проблема моего писателя, но я не знаю, как это исправить. Я знаю, что есть некоторые решения от SVG, такие как использование unicode с &#XXX или σ, но я не могу дать Node String, и он будет написан в правильной форме.

Вот коротко и, надеюсь, понятно пример кода:

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(); 
} 

ответ

6

Попробуйте написать документ с OutputStreamWriter и указать кодировку явно к чему-то, что поддерживает Юникод:

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

Спасибо теперь работает, он записывает в него знак юникода. Огромное! Если есть решение, как я мог писать, думаю, что & # XXX из java в svg тоже меня заинтересовал. Но спасибо за этот быстрый ответ – Luke

+1

Люк, вам следует ** принять ** ответ, чтобы дать ему кредит на чай. –

Смежные вопросы