首先,我要感谢您,并明确表示我已经在这个问题上猛烈抨击了几天,并在其他类似线程中寻找解决方案,但没有成功。
我们的应用程序负责生成 java 类,其中一些可能在类名(因此是文件名)中包含特殊字符,例如 ZoneRéservée435.java 强制编码为 UTF-8。
直到 Java 1.6 的 ant 任务:
<javac source="1.5" target="1.5" srcdir="${src.dir}" destdir="${classes.dir}" deprecation="on" debug="on" classpathref="classpath" fork="false" memoryMaximumSize="512m" encoding="UTF-8">
工作正常。
移至 java 1.7 时,文件名未使用 UTF-8 编码保存,导致文件名类似于:ZoneRe?serve?e435.java
环顾四周,我了解到我需要将环境变量 LC_CTYPE 设置为 UTF-8。这解决了文件名问题,但我仍然收到编译错误
error: class ZoneRéservée435 is public, should be declared in a file named ZoneRéservée435.java
尽管它们具有相同的名称,但它们似乎以两种不同的方式进行编码。有趣的是,这种编码差异发生在 java 1.6 上,但编译得很好。
有没有人有任何建议或想法?
据我了解,编码问题与使用以下内容生成类的事实有关:
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), Charset.forName("UTF-8")));
- 文件内的代码使用 U+00E9 定义特殊字符;
- 文件名使用eU+0301;
关于如何处理这个问题的任何建议?