当前位置: 首页 > 知识库问答 >
问题:

用UTF-8字符将SVG转换为PNG的Java代码

傅正阳
2023-03-14

我正在使用下面的代码从SVG文件创建PNG,并将其写入Servlet输出流。SVG文件的轴名中包含UTF-8(日语)字符。

ServletOutputStream out = response.getOutputStream();
InputStream svgFileStream = new FileInputStream(svgFile);
TranscoderInput inputSvgImage = new TranscoderInput(svgFileStream);
PNGTranscoder converter = new PNGTranscoder();
TranscoderOutput outputPngImage = new TranscoderOutput(out);
converter.transcode(inputSvgImage, outputPngImage);

上面的代码在我的本地程序中运行良好,但是当我上传到服务器时,它显示的是正方形而不是字符。当有英文字符而不是日文字符时,它在本地和服务器上都能正常工作。

你能告诉我你是否面临同样的问题。会不会和Tomcat有关?

我已经从服务器上检查了SVG文件,UTF-8字符在其中可见。我还用“UTF-8”尝试了InputStreamReader而不是InputStream,但没有奏效。

根据找到的一个响应,我尝试在TranscoderOutput中使用“UTF-8”Write而不是ServletOutputStream,但它没有创建任何映像。

谢谢

共有1个答案

邵璞
2023-03-14

只要它在您的本地文件上正常工作并且您提供的是一个png映像,它就必须独立于应用服务器的编码配置,而且您的svg文件本身也是正确编码的,我不认为这是一个编码问题。

@Eugene K.是的,有一种可能是某些java类隐式地使用了os默认的区域设置,但我不能用问题中给出的相同代码再现问题,尽管我没有日语区域设置。IMHO很可能是服务器安装了一些缺失的字体。

它可能不是一种优雅的方式,也不与Java相关,但作为一种解决方案,如果您有机会以某种方式编辑源svg文件(如果需要的话,它也可以通过一些字符串操作来动态地编辑),您可以提供包含日语字符的字体,并从servlet中提供它。然后将这些添加到svg文件中,并为文本指定字体系列:

<defs>
  <style type="text/css">
  <![CDATA[
  @font-face {
    font-family: Somefont;
    src: url('http://localhost:8080/Somefont.ttf');
  }
  ]]>
  </style>
</defs>
<text font-family="Somefont" font-size="40" fill="blue">Text for test!</text>

希望有帮助!

 类似资料:
  • 问题内容: 从我的数据库即时通讯获取以下字符串: 它应该说的是: 我试图像这样将其转换为utf-8: 但是仍然是同样的问题。 有任何想法吗? 问题答案: 使用npm中的utf8模块对字符串进行编码/解码。 安装: 在浏览器中: 在Node.js中: API: 编码: 将任何给定的JavaScript字符串(字符串)编码为UTF-8,并返回该字符串的UTF-8编码版本。如果输入字符串包含非标量值(即

  • 我将python3和Nmap用于smb-os发现。nse脚本获取有关网络中endpoint的详细信息。特别是主机名。当主机名包含非ascii字符时,我会收到类似utf-8的字符串,如下所示: 我想要的是将此字符串转换为真正的utf-8(编码或解码,没关系),如下所示: 我尝试了以下方法,但没有成功: 据我所知,问题在于脚本的输出以解码python字符串的形式给我utf-8编码字符。 可以自动转换吗

  • 问题内容: 我需要将unicode字符串转换为具有以unicode编码的非ascii字符的字符串。例如,字符串“汉字Max”应显示为“ \ u6F22 \ u5B57 Max”。 我尝试过的 的不同组合 新的String(sourceString.getBytes(encoding1),encoding2) Apache StringEscapeUtils也会转义ascii字符,例如双引号 Str

  • 问题内容: 我的数据采用以下格式:或类似。我想将它们转换为UTF-8(原始字符是好和我)。我该怎么做? 问题答案: 这可能是最简单的解决方案。

  • 问题内容: 我有一个带有“ñ”字符的字符串,并且我有一些问题。我需要将此字符串编码为UTF-8编码。我已经通过这种方式尝试过,但是没有用: 如何将该字符串编码为utf-8? 问题答案: Java中的对象使用无法修改的UTF-16编码。 唯一可以使用不同编码的是。因此,如果你需要UTF-8数据,则需要一个。如果你有一个包含意外数据的,则问题出在较早的地方,该错误地将一些二进制数据错误地转换为a (即

  • 我有一个从第三方应用程序收到的字符串,我希望在我的Windows界面上使用C#以任何语言正确显示它。 由于编码不正确,我的字符串中有一段在西班牙语中如下所示: AcciÃn 然而它应该看起来像这样: 阿克松 根据这个问题的答案:如何知道C#中的字符串编码,我接收到的编码应该已经在UTF-8中出现了,但它是在编码时读取的。默认值(可能是ANSI?)。 我试图将这个字符串转换成真正的UTF-8,但问题