MaL*_*nok 5 java encoding java-7
首先,我要感谢你并明确表示,我已经在这个问题上抨击了好几天,并在其他类似的线程中寻找解决方案但没有成功.
我们的应用程序负责生成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">
Run Code Online (Sandbox Code Playgroud)
工作得很好.
当移动到java 1.7时,没有使用UTF-8编码保存fileName,导致文件名类似于:ZoneRe?serve?e435.java
环顾四周,我开始明白我需要将env变量LC_CTYPE设置为UTF-8.这解决了fileName问题,但我仍然遇到编译错误
error: class ZoneRéservée435 is public, should be declared in a file named ZoneRéservée435.java
Run Code Online (Sandbox Code Playgroud)
虽然它们具有相同的名称,但它们似乎以两种不同的方式编码.有趣的是,编码的这种差异发生在java 1.6中,但编译得很好.
有没有人有任何建议或想法?
根据我的理解,编码问题与使用以下内容生成类的事实有关:
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), Charset.forName("UTF-8")));
Run Code Online (Sandbox Code Playgroud)
关于如何处理这个问题的任何建议?
看来您的文件系统使用字母的分解形式(即字符and或and\xc3\xa9的序列),而代码生成器使用(即)的组合形式。这是 Apple 的 HFS+ 文件系统上的一个典型问题,该系统始终使用分解形式。e\xc2\xb4\\u0065\\u0301\xc3\xa9\\u00e9
要解决此问题,您可以做的是修改您的应用程序,以使用以下命令分解出现在生成的源文件中的类名java.text.Normalizer:
Normalizer.normalize(classname, Normalizer.Form.NFD)
另请参阅: http: //en.wikipedia.org/wiki/Unicode_equivalence
\n| 归档时间: |
|
| 查看次数: |
953 次 |
| 最近记录: |