【问题标题】:javac marks my comments as errors [duplicate]javac将我的评论标记为错误[重复]
【发布时间】:2016-08-18 02:55:52
【问题描述】:

我正在尝试编译位于以下位置的 3 个 java 文件: /var/www/PhpProject2/Solutions/5/9/1/ 在我的电脑(Linux Ubuntu)上。

我在 shell 中使用了以下命令: javac /var/www/PhpProject2/Solutions/5/9/1/*.java

它会输出 100 个如下所示的错误:

错误:用于编码 UTF8 的不可映射字符 合并排序(arr); // ���� �� ����� ������ ��� ������ ���

箭头指向其中一个符号。

这对我来说是新的,因为据我所知,编译会删除我代码中的所有 cmets,而不是将它们视为错误。

到目前为止我所尝试的:

将命令更改为:javac -encoding UTF-8 /var/www/PhpProject2/Solutions/5/9/1/*.java

查找文件编码: 文件 -bi /var/www/PhpProject2/Solutions/5/9/1/UnionIntervals.java

然后我尝试了: javac -编码文本/x-c++; charset=iso-8859-1 /var/www/PhpProject2/Solutions/5/9/1/*.java

都以同样的错误告终。

【问题讨论】:

  • 尝试hexdump -C检查编译器抱怨的位置之一的文件中的实际内容。
  • 您的问题可能与此类似:stackoverflow.com/questions/4995057/…
  • @MichaelMarkidis 我之前读过这个。它是通过重新保存文件来解决的,所以实际上根本没有问题,如果有的话,它在实际代码中 - 而不是在 cmets就像我的情况一样。
  • @Markus ,在这种情况下,它是外语中的一个简单字符。无论如何这应该没有效果,因为它在评论中
  • 评论中的事实无关紧要。错误来自输入例程,而不是语法分析器。从其字符集的角度来看,该文件的格式不正确。 javac 与任何其他程序一样有权投诉。

标签: java shell encoding compilation javac


【解决方案1】:

鉴于以下简约 Java 文件:

> cat test.java 
// ä

以下命令给出了您所描述的错误:

> javac -encoding utf8 test.java 
test.java:1: warning: unmappable character for encoding utf8
// ?

当使用正确的编码时,文件被正确处理:

> javac -encoding iso-8859-1 test.java 

这是因为 Java 编译器需要解析整个文件(包括 cmets)。 cmets 仅在解析后被剥离。

【讨论】:

  • 非常感谢!这实际上对我有用,但是您如何认为 iso-8859-1 是正确的编码?
  • 根据您提供的file 命令的输出进行有根据的猜测。顺便说一句,我认为你应该整理一下你的环境。您的源文件的编码应该与您的默认编码匹配,那么您就不必处理此类问题。你的LANG 环境变量的内容是什么?
  • 我不知道,我怎么知道?
  • 在控制台中输入echo $LANG
  • 好的,上面写着:en_US.UTF-8
猜你喜欢
  • 1970-01-01
  • 2015-03-23
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
相关资源
最近更新 更多