【发布时间】:2019-06-06 16:21:48
【问题描述】:
我正在使用以下代码从 SVG 文件创建 PNG 并将其写入 Servlet 输出流。 SVG 文件在 AXIS 名称中包含 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 字符。 我还尝试了 InputStreamReader 而不是带有“UTF-8”的 InputStream,但没有奏效。
根据一个响应发现,我尝试在 TranscoderOutput 中使用“UTF-8”写入而不是 ServletOutputStream,但它没有创建任何图像。
谢谢
【问题讨论】:
-
如果您可以控制正在运行的 Tomcat 服务器,您可以尝试指定以下 JVM 选项:-Dfile.encoding=UTF-8
-
某些 Java 类默认使用基于区域设置和系统配置的系统范围(“平台”)“默认”字符集。这就是为什么您的代码在不同环境中的表现可能不同的原因。