首先,我要感谢你并明确表示,我已经在这个问题上抨击了好几天,并在其他类似的线程中寻找解决方案但没有成功.
我们的应用程序负责生成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)
关于如何处理这个问题的任何建议?
我注意到我的一些环境变量没有被JVM接收.
我在我的.bash_profile定义如下:
IO_HOME='some_value'
export IO_HOME
Run Code Online (Sandbox Code Playgroud)
并通过在shell中做:
echo $IO_HOME
Run Code Online (Sandbox Code Playgroud)
我得到了正确的结果.
但是既没有System.getProperties()也没有System.getenv()显示这个变量.我尝试了Java 6和Java 7.
有什么我想念的吗?
我想首先说我已经阅读了几个与此类似的线程,但没有一个真正解决了我的问题.我还要声明我曾试图使用SimpleDateFormat并且joda.DateTime没有任何成功.
问题如下:
我有一个Calendar对象,其中包含有关特定日期的信息:2008-04-30T00:00:00Z使用该calendar.getTime()方法时,我可以获得不同的结果,因为我知道该方法正在寻找本地值
从而:
UK: 2008-04-30T01:00:00.000+0100
US: 2008-04-30T20:00:00.000-0400
Run Code Online (Sandbox Code Playgroud)
但是我希望得到一个Date对象,它只包含日期和时间值"2008-04-30T00:00:00",完全忽略任何时区.
我怎样才能做到这一点?
正如我之前提到的,我尝试使用
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")
但总是得到相同的结果.
任何帮助都会非常感谢干杯.