发布日期:2018-03-26
设置Java的默认编码方式+ 查看更多
设置Java的默认编码方式
+ 查看更多
发布日期:2018-03-08 17:46
分类:JAVA
浏览次数:333
如何用编程的方式在JVM(1.5x)中设置默认编码方式
我已经看过这种方法 -Dfile.encoding=whatever ,不过是在更高的JVM版本里,然而因为一些原因我没法用那么高的版本。
我已经试过这样:
我已经看过这种方法 -Dfile.encoding=whatever ,不过是在更高的JVM版本里,然而因为一些原因我没法用那么高的版本。
我已经试过这样:
System.setProperty("file.encoding", "UTF-8");
这个属性确实被设置成功了,但最后调用getBytes方法的时候却不是UTF-8编码的
在进入你的主方法之前,String.getBytes()返回的字符串,以及InputStream和OutputStream的构造都已经用默认编码方式缓存好了。
正如 Edward Grech 所指出的,修改环境变量 JAVA_TOOL_OPTIONS 可以改变这个属性,但应该这样写:
System.setProperty("file.encoding", "UTF-8"); byte inbytes[] = new byte[1024]; FileInputStream fis = new FileInputStream("response.txt"); fis.read(inbytes); FileOutputStream fos = new FileOutputStream("response-2.txt"); String in = new String(inbytes, "UTF8"); fos.write(in.getBytes());
回答
很遗憾,文件编码方式这个属性在虚拟机刚启动的时候就被确定了;在进入你的主方法之前,String.getBytes()返回的字符串,以及InputStream和OutputStream的构造都已经用默认编码方式缓存好了。
正如 Edward Grech 所指出的,修改环境变量 JAVA_TOOL_OPTIONS 可以改变这个属性,但应该这样写:
java -Dfile.encoding=UTF-8 … com.x.Main
Charset.defaultCharset() 可以展示被更改的file.encoding属性,但Java核心库中的大部分需要确定编码方式的部分都不受其影响。
当你编码或解码的时候,你可以查看 file.encoding 这个属性,或是调用 Charset.defaultCharset() 得到默认编码方式,
然后对合适的方法或构造函数重载来修改它。
当你编码或解码的时候,你可以查看 file.encoding 这个属性,或是调用 Charset.defaultCharset() 得到默认编码方式,
然后对合适的方法或构造函数重载来修改它。