0

我正在用 Batik 编写一个用于多语言图像的项目。因此我需要像“sigma”或“alpha”这样的符号。我必须将字符写为文本 - 而不是多边形或字形 - 因为它必须由我的项目再次编写。

如果我在我的 SVGDocument 中写入一个 unicode 字符,它会在调试器中正确显示,但如果我写入 SVG,结果总是有一个?,或者对于普通字母,A例如?A

我认为这是我的作家的一个问题,但我不知道如何解决它。我知道 SVG 有一些解决方案,比如将 unicode 与&#XXXor一起使用,σ但我不能给节点那个字符串,它会以正确的形式写入。

这是简短且希望可以理解的代码示例:

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

1 回答 1

7

尝试使用OutputStreamWriter编写文档,并将字符编码明确指定为支持 unicode 的内容:

    OutputStream fileOutputStream = new FileOutputStream(svgFile);
    Writer svgWriter = new OutputStreamWriter(fileOutputStream, "UTF-8"); 
于 2009-10-29T11:22:22.750 回答