在java中打印unicode字符

时间:2017-07-03 05:46:26

标签: java unicode utf-8 unicode-string

在java中显示unicode字符显示"?"标志。例如,我试图打印"अ"。其unicode号码为U + 0905,html表示为"अ"。 以下代码打印"?"而不是unicode字符。

char aa = '\u0905';
String myString = aa + " result" ;
System.out.println(myString); // displays "? result"

有没有办法直接从unicode本身显示unicode字符而不使用unicode个数字?即"अ"保存在文件中现在显示在jsp中的文件。

4 个答案:

答案 0 :(得分:2)

尝试使用utf8字符集 -

        Charset utf8 = Charset.forName("UTF-8");
        Charset def = Charset.defaultCharset();

        String charToPrint = "u0905";

        byte[] bytes = charToPrint.getBytes("UTF-8");
        String message = new String(bytes , def.name());

        PrintStream printStream = new PrintStream(System.out, true, utf8.name());
        printStream.println(message); // should print your character

答案 1 :(得分:0)

您的myString变量包含完全正确的值。问题必须是来自System.out.println(myString)的输出,它必须将一些字节发送到某个输出以显示您想要查看的字形。

System.out是使用“平台默认编码”将字符转换为字节序列的PrintStream - 也许您的平台不支持该字符。例如。在德国的Windows 7计算机上,默认编码为CP1252,此编码中没有与您的角色对应的字节序列。

或许编码是正确的,但只是从字符创建图形字形的字体没有这个字符。

如果要将输出发送到Windows CMD.EXE窗口,则可能有两个原因适用。

但请放心,您的字符串是正确的,如果您将其发送到可以处理它的目的地(例如Swing JTextField),它将正确显示。

答案 2 :(得分:0)

Java定义了两种类型的流,字节流和字符流。

System.out.println()无法显示Unicode字符的主要原因是System.out.println()是一个字节流,仅处理16位低位字符

为了处理Unicode字符(16位Unicode字符),您必须使用基于字符的流,即PrintWriter。

PrintWriter支持print()和println()方法。因此,您可以使用这些方法 就像您在System.out中使用它们一样。

PrintWriter printWriter = new PrintWriter(System.out,true);
char aa = '\u0905';
printWriter.println("aa = " + aa);

答案 3 :(得分:0)

我在使用 Eclipse 时遇到了同样的问题。我通过将控制台的编码格式从 ISO-8859-1 切换到 UTF-8 解决了我的问题。您可以在 Run/Run Configurations/Common 菜单中进行。

https://eclipsesource.com/blogs/2013/02/21/pro-tip-unicode-characters-in-the-eclipse-console/