Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:Unicode未通过图形正确转换为文本。drawString(…)_Java_Graphics_Unicode - Fatal编程技术网

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呈现规则,我无法告诉您原因。可能是字体问题?我认为plain
Arial
没有用于Devenagari的字形,所以你可能会得到一种没有字形的回退字体?如果直接使用已知的好字体(例如Windows下的
Mangal
),会发生什么?