3

我们被要求制作一个程序来读取文本文件并显示 Unicode 字符的摘要。在执行此操作时,我遇到了一些 Unicode 字符的问题,这些字符似乎在我的控制台中打印为问号。但是,当我使用 Swing 输出相同的 Unicode 文本时,它不再是问号了

    System.out.println("\u0126"); // appears to be ? in my console.

    JOptionPane.showMessageDialog(null,"\u0126"); // seems to display the character successfuly

我可以把问题抛在脑后,因为我要使用 GUI,但我想要一个解释,像我这样的初学者可以理解的东西。

为什么某些 Unicode 字符在控制台中显示为问号,但在 Swing 中没有正确打印?(Eclipse、NetBeans、JCreator、JGrasp 也一样,我认为这是我的 IDE 的问题)。

是编码问题还是字体问题?为了将来在控制台中成功显示 Unicode 文本而不会出现问号问题,我应该怎么做?

4

3 回答 3

3

UNICODE 生成的字符将取决于您正在使用的字体中的字符字形。大多数字体只有完整 UNICODE 标准的一个子集。例如,如果您想显示简体中文,您使用的字体必须具有简体中文的字形。

UNICODE 联盟对此有一些信息。

于 2013-09-17T17:35:13.783 回答
1

如何在 Java 中插入表情符号和花哨的 Unicode 字符?

我花了一段时间才自己找到解决方案,希望对您有所帮助:)

  // To run emojis in Java make sure you have installed Windows Terminal
  // and in order to insert them, remember Java char only support 16-bit 
  // characters meanwhile a great part of Unicode is 32-bit sooooo
  // every single Unicode character must be break into two 16-bit 
  // character, these are called surrogates.


  // How to create surrogates and use emojis in Java! :D
  //1. Copy Uni code you want to use (Ommit U+, that's only a label)
  //   https://unicode-table.com/en/1F680/
  //2. Paste in here and copy both surrogates
  //   http://www.russellcottrell.com/greek/utilities/SurrogatePairCalculator.htm
  //3. Code it as Strings and separate it by \u symbol in Java.
  //4. Compile it and run it in Windows Terminal.
  //   #HappyCoding!!


  // One small thing: For some reason you need to put two spaces after 
  // every two surrogates, otherwise it'll print two question marks next
  // to it.

  // Other small thing: Try to use emojis at the end of a line because for 
  // some reason if you insert String after the Unicode it'll do strange 
  // things.


  String rocket = "Hello Entrepeneurs \uD83D\uDE80  ";
  System.out.print(rocket);
于 2020-01-21T16:47:02.467 回答
0

u0126 -> 是大多数终端输出的 ANSCII(或任何名称)之外的字符。该字符实际上是 Ħ,但这只会在您的控制台可以显示该字符时显示。

您可以查看安装 utf-8 是否可以让您显示这样的字符。

于 2013-09-17T17:33:42.120 回答