我认为始终在Java应用程序中设置file.encoding
系统属性是个好主意。
假设我没有设置file.encoding
。这意味着Java将使用依赖于平台的默认字符集(例如在String.getBytes
中),这使得整个应用程序依赖于平台。
例如,如果我们设置-Dfile.encoding=UTF-8
,我们保证String.getBytes
之类的调用在任何平台上都能正常运行。
有意义吗?
答案 0 :(得分:2)
不,它不一定有道理。如果你想在任何平台上读取你自己的应用程序尚未创建的文件,你最好保留默认情况下的文件编码,因为这是你需要能够读取这些文件的内容。 / p>
如果您阅读由您自己的应用程序或使用众所周知的指定文件编码的应用程序创建的文件,那么您应该在实例化IO读取器和编写器时使用此编码。
对于String.getBytes()
之类的方法,请不要使用它们,如果您想使用特定的编码而不是平台的默认编码,请使用String.getBytes(Charset)
。
答案 1 :(得分:0)
有条件的是。正如JB所提到的,当读取其他本地应用程序(或同一平台上的其他远程应用程序,如果您有同构服务器场)生成的文件时,使用“平台默认”可能偶尔会有所帮助。
所以,谨慎选择,但总的来说我会这样做。总是创建自己的读者的建议并不总是可行的。我相信一般来说,生成使用扩展字符的文件的大多数事情最终会使用UTF-8。
最后,因为很多文件都依赖于你控制之外做出的选择,所以它将归结为测试和定制,但是我觉得你觉得从UTF-8开始并且必要时降级比我更舒服逆。
答案 2 :(得分:0)
设置file.encoding
系统属性通常不是一个好主意,因为这不是Java中支持的配置选项。
这意味着它可能会也可能不会起作用。 不工作可能意味着Exceptions。确切地说,“它适用于Java 1.6,它适用于Windows上的Java 1.7,但它不再适用于Linux上的Java 1.7。”
背后的原因是here:
J2SE不需要“file.encoding”属性 平台规范;这是Sun的实施和内部细节 不应由用户代码检查或修改。它也是有意的 只读;从技术上讲,不支持此属性的设置 在命令行上或在程序期间的任何其他时间使用任意值 执行。
更改VM使用的默认编码的首选方法 运行时系统将更改底层平台的区域设置 在开始Java程序之前。