【问题标题】:\u in Java comment is leading to error message, why?Java 注释中的 \u 导致错误消息,为什么?
【发布时间】:2014-07-16 09:32:23
【问题描述】:
// \u represent unicode sequence
    char c = '\u0045';
    System.out.println(c);

代码只有这么多,eclipse 显示以下错误消息

"Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Invalid unicode

现在,当我从评论中删除 \u 时它工作正常,评论中的 \u 有什么问题?这是一个错误还是存在某种关系,只要认为 Java 应该让 cmets 保持原样。

【问题讨论】:

  • \ 是 Java 中的转义序列。它对编译器有特殊的意义。 docs.oracle.com/javase/tutorial/java/data/characters.html
  • 如果我在评论中添加\u,IntelliJ 不会显示任何错误,我认为是 Eclipse 编译器问题
  • @Stultuske,但如果我只放 '\' 就可以正常工作,问题只会出现在 '\u' 上。 Deepak 是的,我也认为它应该工作。巴勃罗,这不应该只是日食问题,就好像我忽略了错误并继续编译器给出了错误消息,但你说它正在与 IntelliJ 一起工作,这很奇怪。
  • 嗯...你以两种不同的方式使用某些东西....是的,这会触发两种不同的结果是正常的
  • @PabloLozano 也不使用 javac 编译 - IntelliJ 使用的是宽松规则。

标签: java unicode


【解决方案1】:

编译器会先读取你的整个源代码(后面的注释会被忽略),但是他不能识别“\u”,因为它不是有效的unicode-character。

要修复它,你可以写

// \\u represent unicode sequence (extra backslash for escaping)

// \ u represent unicode sequence (extra whitespace for escaping)

编辑:
这是因为编译器首先将所有内容都转换为 unicode。编写这个简单的程序

class Ideone
{
    public static void main (String[] args)
    {
        // \u000A System.out.println("Hi");
    }
}

输出 Hi,因为\u000A 代表换行符。 Proof

【讨论】:

  • 这很烦人,我在 cmets 中有 ...\upload\... 的路径并收到错误消息,所以你甚至必须逃避你的 cmets!
【解决方案2】:

cmets 在某种程度上也被解释了。 一项简短的研究对您的问题产生了以下结果: Unicode in javadoc and comments?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 2010-09-19
    • 2012-05-26
    • 1970-01-01
    • 2013-09-14
    • 2011-01-30
    相关资源
    最近更新 更多