Java:Unicode未通过图形正确转换为文本。drawString(…)
我正在尝试生成不同语言的文本图像 为此,我使用以下代码:Java:Unicode未通过图形正确转换为文本。drawString(…),java,graphics,unicode,Java,Graphics,Unicode,我正在尝试生成不同语言的文本图像 为此,我使用以下代码: BufferedImage bufferedImage = new BufferedImage(200, 60, BufferedImage.TYPE_INT_RGB); Graphics graphics = bufferedImage.getGraphics(); graphics.setColor(Color.PINK); graphics.setFont(new Font("Arial", Font
BufferedImage bufferedImage = new BufferedImage(200, 60, BufferedImage.TYPE_INT_RGB);
Graphics graphics = bufferedImage.getGraphics();
graphics.setColor(Color.PINK);
graphics.setFont(new Font("Arial", Font.PLAIN, 12));
graphics.drawString("ट्रेल्स", 20, 40);
ImageIO.write(bufferedImage, "jpg", outputStream);
但是上面代码生成的图像是
图像中的文本与ट्रेल्स代码>
上述不匹配的原因是ट्रेल्स
是\u091f\u094d\u0930\u0947\u0932\u094d\u0938
,如果我们将每个unicode数字转换为其对应的字符,我们会得到与图像中完全相同的文本
所以我认为,graphics.drawString(…)
的工作是正确的
但是由于输出不是预期的,那么如何避免这种情况呢
任何指向textToImage
api的指针都可以。您可以尝试使用不同的字体,如单间距字体或SansSerif字体
Font font = new Font(Font.MONOSPACED, Font.PLAIN, 11);
graphics.setFont(font);
graphics.drawString("ट्रेल्स. रीकदोसै. जोकालन्त", 1, 10);
graphics.dispose();
其中,我使用了java.awt.Font类。这很有效,字符被正确地表示出来。我遇到了问题
正如@bobince所正确指出的,问题在于我使用的字体Arial
要呈现特定语言的文本,字体应具有该语言的字形,以正确呈现文本
e、 g对于呈现印地语文本,具有印地语字形的Mangal
等字体将正确呈现文本
同样的印地语字体也适用于马拉地语,因为两种语言的字形保持不变,但不适用于泰米尔语、泰卢固语等语言。您在哪个平台上?什么版本的Java?我在Mac OS X上。Java 1.7.Hmm。看起来像是Java中的渲染错误。让我们看看还有没有人来。你可以试试Java6,那就是“渲染”。drawString没有实现完整的Unicode呈现规则,我无法告诉您原因。可能是字体问题?我认为plainArial
没有用于Devenagari的字形,所以你可能会得到一种没有字形的回退字体?如果直接使用已知的好字体(例如Windows下的Mangal
),会发生什么?