【问题标题】:I can't figure out why DrJava won't output Unicode symbols我不明白为什么 DrJava 不会输出 Unicode 符号
【发布时间】:2013-05-22 03:44:55
【问题描述】:

对于我在 Java 和一般编程方面令人难以置信的新手,我想先向您道歉。但是我到处寻找答案,但似乎找不到。

所以我只是尝试运行以下命令:

public class WriteSquares2
{
  public static void main(String[] args)
  {
    for (int i=1; i<=10; i++)
    {
      System.out.println(i + " \u2261 " + (i % 7) + " modulo 7");
    }
  }
}

Unicode 字符 \u2261 是全等符号 (≡)。 DrJava 显示以下输出:

1 ? 1 modulo 7
2 ? 2 modulo 7
3 ? 3 modulo 7
4 ? 4 modulo 7
5 ? 5 modulo 7
6 ? 6 modulo 7
7 ? 0 modulo 7
8 ? 1 modulo 7
9 ? 2 modulo 7
10 ? 3 modulo 7

最奇怪的是,当我只是输入时

'\u2261'

进入交互框,我得到单引号中的等价字符:

'≡'

我尝试在代码中简单地放入“\u2261”而不是“\u2261”,但后来我得到了这样的东西:

8803 modulo 7
8805 modulo 7
8807 modulo 7

我也尝试将 unicode 字符简单地插入代码中,但这只是给出了一条错误消息。谁能弄清楚发生了什么或我做错了什么?非常感谢您的帮助。

[我应该补充一点,这不是家庭作业或任何东西,因为我们的书甚至几乎没有提到 Unicode——只是想弄清楚这一点......当我开始时,我认为这不会这么难!]

编辑:我使用的是 Mac OS 10.7.5,Java 博士说它的版本是“drjava-20120818-r5686”。

编辑 #2:这是使用 Monospaced 12 作为我的主要字体的屏幕截图。它仍然显示为问号,即使我可以让控制台将符号返回给我,如果我直接输入它,但使用单引号。

【问题讨论】:

  • 当我签入 Eclipse 时,它​​对我来说没有问题。没有 drjava....
  • 当我签入 Eclipse 时,它​​不起作用。也没有 drjava;你并不孤单:S
  • 也许您系统上使用的字体没有该字符的字形?
  • 我认为这与“终端”的设置有关。例如,在 Windows 命令提示符下,如果您使用的代码页不包含您想要的字符,那么字符转换将失败并给您一个?。通过chcp 检查您的代码页。在 Unix 下,类似地,它受语言环境设置的影响。检查 LANG(我记得对吗?) env 变量以确保编码包含您需要的字符
  • @William 我可以在我的电脑上很好地输入所有字符——由于某种原因,它们不会出现在 DrJava 中。我会说它没有正确分配字体或什么?我不是一个真正的计算机“极客”(从积极的意义上说),所以除了基本的 GUI 之外,我对很多知识都不是很了解。 @Adrian 我应该补充说我正在使用 Mac ......不太确定我是否理解你的指示。也许是 Windows 的问题?

标签: java unicode drjava


【解决方案1】:

问题与您使用的字体有关,与您的代码无关。在Edit &gt; Preferences &gt; Display Options &gt; Fonts &gt; Main Font 下查看 DrJava 的设置。

DrJava 在 Linux 上使用默认字体(等宽 12):

DrJava 在 Linux 上使用不同的字体(PT Sans 12):

两张截图来自同一个 DrJava 实例;我什至不必关闭它。请注意,在“交互”窗格中,字形对于我的等宽字体是正确的,并且是 PT Sans 的通用占位符。在控制台选项卡中也会出现同样的情况(未显示)。

【讨论】:

  • 具体的等宽字体是DejaVu Sans Mono。
  • 感谢您的回答。这对我来说很有意义,我认为它会起作用,但不幸的是,当我将字体更改为 Monospaced 12 时,我仍然用问号代替了全等符号。现在我真的不确定发生了什么......
  • (我在原帖中添加了截图。)
  • 我的例子是表明它可能是字体字形问题。 “等宽 12”可能会映射到不同平台上的不同字体。由于我的示例来自 Linux 机器并且您使用的是 OS X,因此您可能需要尝试系统上安装的其他字体。
【解决方案2】:

我做了一些研究,找到了一个之前从另一个问题here找到的解决方案

所以在这种情况下,它可能是类似的。不是你的代码,而是 DrJava 处理 unicode 的方式取决于你的系统。

" 字符编码取决于系统。根据您的盒子,它可能会打印 UTF-16 编码的 16 位(即 9794)、高 8 位(即 38)或在您的情况下,低 8 位(即 66)。

9794 / 256 = 38
9794 % 256 = 66

"

【讨论】:

    【解决方案3】:

    您是否已将提示更改为以 unicode 输出。(请注意,英语世界中的 Java 默认值为 IS0-8859-1)。

    【讨论】:

    • 我不确定你的意思。提示是指在 Dr Java 控制台窗口中吗?我查看了所有菜单,并没有发现 Unicode。这似乎是一件很简单的事情......
    猜你喜欢
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多