最近我遇到了一个我记不起来的文件字符编码问题.在不同平台上运行时,必须了解文本文件的字符编码和编写正确处理编码的代码是很常见的.但我发现的问题是由与执行平台不同的平台上的编译引起的.这完全出乎意料,因为根据我的经验,当javac创建一个类文件时,重要的参数是java源和目标params,以及进行编译的JDK的版本.我的情况是,在Mac OS X上使用JDK 1.6.0_22编译的类与在Linux上运行时使用1.6.0_23-b05编译的类不同,在Mac OS X上运行时.指定的源和目标是1.4.
使用PrintStream println方法将在内存中编码为ISO-8859_1的String写入磁盘.根据Java代码编译的平台,字符串的编写方式不同.这导致了一个错误.该错误的修复是在写入和读取文件时明确指定文件编码.
让我感到惊讶的是,行为的不同取决于编译类的位置,而不是运行类的平台.我非常熟悉Java代码在不同平台上运行时的行为方式.但是,当在不同平台上编译的相同代码在同一平台上运行不同时,它有点可怕.
有没有人遇到过这个具体问题?对于在没有明确指定字符编码的情况下读取和写入字符串到文件的任何Java代码,似乎都不适用.这种情况经常发生多少次?