まず第一に、私はあなたに感謝し、私がこの問題について数日間頭を悩ませ、他の同様のスレッドで解決策を探していて成功しなかったことを明確に言いたいと思います。
私たちのアプリケーションは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に移動すると、fileNameはUTF-8エンコーディングを使用して保存されず、ZoneRe?serve?e435.javaのようなファイル名になりました。
周りを見回すと、環境変数LC_CTYPEをUTF-8に設定する必要があることがわかりました。これでfileNameの問題は解決しましたが、それでもコンパイルエラーが発生します
error: class ZoneRéservée435 is public, should be declared in a file named ZoneRéservée435.java
それらは同じ名前ですが、2つの異なる方法でエンコードされているようです。興味深いのは、このエンコーディングの違いはJava 1.6で発生していましたが、正常にコンパイルされていたことです。
誰か提案やアイデアはありますか?
エンコーディングの問題を理解するようになったのは、クラスが次のように生成されるという事実に関連しています。
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), Charset.forName("UTF-8")));
- ファイル内のコードは、U+00E9を使用して特別な文字を定義しています。
- ファイル名はeU+0301を使用します。
これに対処する方法について何か提案はありますか?