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

标签 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 数字转换为其对应的字符,我们将获得与图像中完全相同的文本。

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

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

任何指向 textToImage 的指针api 也可以。

最佳答案

我明白了。

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

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

例如,为了呈现印地语文本,Mangal 等具有印地语语言字形的字体将正确呈现文本。

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

关于Java:Unicode 未通过 graphics.drawString(...) 正确转换为文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19907094/

相关文章:

graphics - gnuplot 变量点大小

java - Gradle "test"任务没有在应该失败的地方失败

java - 我可以用java重新发送邮件吗?

java - 如何用jsp显示不同的内容:include and jsp:param

math - 从 2D 点计算单位球体上的 3D 坐标

java - Swing 应用程序在多显示器配置上速度变慢

c - __STDC_ISO_10646__ 的可能值

python - 从 python 脚本中检查 python 版本,并基于它检查 if/else

c++ - "UTF-16"和 "std::wstring"有什么区别?

java - 如何将sqlite数据库连接到netbeans