Java:通过graphics.drawString(...)无法将Unicode正确转换为文本

时间:2013-11-11 13:02:43

标签: 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.PLAIN, 12));
    graphics.drawString("ट्रेल्स", 20, 40);
    ImageIO.write(bufferedImage, "jpg", outputStream);

但上面代码生成的图像是enter image description here

图片中的文字与ट्रेल्स

略有不同

上述不匹配的原因是ट्रेल्स的unicode字符为\u091f\u094d\u0930\u0947\u0932\u094d\u0938,如果我们将每个unicode数字转换为相应的字符,我们会得到与图像完全相同的文本。 / p>

所以我认为graphics.drawString(...)正在做正确的工作。

但由于输出不是预期的,那么如何解决这个问题呢?

任何指向textToImage api的指针也会这样做。

2 个答案:

答案 0 :(得分:2)

我遇到了问题。

正如@bobince所正确指出的那样,问题出在我使用的字体Arial上。

要呈现特定语言的文本,该字体应具有该语言的字形,以正确呈现文本。

例如,对于渲染印地文文本,像Mangal这样具有印地语语法字形的字体将正确呈现文本。

同样的印地语字体也适用于马拉地语,因为这两种语言的字形保持不变,但不适用于泰米尔语,泰卢固语等语言。

答案 1 :(得分:0)

您可以尝试使用其他字体,例如MONOSPACED或SansSerif

Font font = new Font(Font.MONOSPACED, Font.PLAIN, 11);
graphics.setFont(font);
graphics.drawString("ट्रेल्स. रीकदोसै. जोकालन्त", 1, 10);
graphics.dispose();

我在哪里使用过java.awt.Font类。这很有效,人物的表现也正确。