【发布时间】:2016-02-18 13:38:29
【问题描述】:
我正在使用下面的语句在java中将unicode打印为字符串
System.out.println("\u0917\u094d\u0930\u093e\u0939\u0915");
它在控制台上打印ग्राहक。 现在我不是在 println() 中传递简单的字符串,而是像这样使用
System.out.println(this.HindiConvertUni("ग्राहक"));
public String HindiConvertUni(String str)
{
StringBuffer ostr = new StringBuffer();
for (int i = 0; i < str.length(); i++)
{
char ch = str.charAt(i);
if ((ch >= 0x0020) && (ch <= 0x007e)) // Does the char need to be converted to unicode?
{
ostr.append(ch); // No.
} else // Yes.
{
ostr.append("\\u"); // standard unicode format.
// Get hex value of the char.
String hex = Integer.toHexString(str.charAt(i) & 0xFFFF);
// Prepend zeros because unicode requires 4 digits
for (int j = 0; j < 4 - hex.length(); j++)
{
ostr.append("0");
}
// standard unicode format.
ostr.append(hex.toLowerCase());
}
}
return (new String(ostr));
}
现在我想打印我用作参数的字符串。但它打印像 \u0917\u094d\u0930\u093e\u0939\u0915 我希望将其打印为 ग्राहक 而不是 unicode。 如何使它成为可能。Thanx 在高级。 实际上我正在使用 iText 来制作我正在做的报告
BaseFont unicode = BaseFont.createFont("/home/mani/current/ARIALUNI.TTF",
BaseFont.IDENTITY_H, true);
Font font=new Font(unicode,12,Font.NORMAL,new BaseColor(50,205,50));
PdfPCell customerLblCell = new PdfPCell(new Phrase("\u0917\u094d\u0930\u093e\u0939\u0915",
font));
但是我看起来类似于
PdfPCell customerLblCell = new PdfPCell(new Phrase(this.HindiConvertUni("ग्राहक"),
font));
但它打印的是 unicode 而不是 ग्राहक!
我正在尝试像上图那样打印 ऐसा करने की कोशिश。
【问题讨论】:
-
请在以后的帖子中更加努力地格式化您的代码 - 我已经修复了这个问题,但它真的很难开始阅读。现在,至于你的问题——是的,你明确地转义了字符串,所以我对它被转义并不感到惊讶。如果你不想逃避它,你想做了什么?为什么不直接使用
System.out.println("ग्राहक");?感觉您需要了解实际文本(只是一个 UTF-16 代码单元序列)与该文本的可能 源代码 表示形式之间的区别,其中可能包括转义序列。 -
谢谢哥们!我会在这里尝试我很新。 @乔恩斯基特
-
我正在使用 Itext 库来打印报告。但是由于 itext 无法识别印地语文本(ग्राहक)。首先,我将字符串转换为 unicode,然后从这些 unicode itext 执行所需的报告。但问题如上所述
-
当所有字符串 都是 Unicode 开头时,不清楚您所说的“将字符串转换为 Unicode”是什么意思。如果您的意思是“使用
\u转义Unicode 字符”,那很好。但是,如果它适用于 itext 并且这就是您想要实现的目标,那么问题是什么?请编辑您的问题以使其更清楚。 -
@manikantgautam: 如果 在源代码中 转义时它可以这样工作,那么使用非转义形式也应该没问题,只要你配置了你的编译器使用正确的编码(以了解您如何表示源代码本身)。这与 iText 无关。
标签: java string methods unicode itext