Написание символов юникода с помощью батика не работает - PullRequest
0 голосов
/ 29 октября 2009

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

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

Я думаю, что это проблема моего писателя, но я не знаю, как это исправить. Я знаю, что есть некоторые решения от SVG, такие как использование юникода с &#XXX или σ, но я не могу дать Node the 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();
}

1 Ответ

6 голосов
/ 29 октября 2009

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

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