在java中显示unicode
字符显示"?"标志。例如,我试图打印"अ"。其unicode
号码为U + 0905,html表示为"अ"。
以下代码打印"?"而不是unicode
字符。
char aa = '\u0905';
String myString = aa + " result" ;
System.out.println(myString); // displays "? result"
有没有办法直接从unicode
本身显示unicode
字符而不使用unicode
个数字?即"अ"保存在文件中现在显示在jsp中的文件。
答案 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/