很奇怪,写个测试的Application执行结果是UTF-8,放到Struts2的Action里执行就变GBK了。
Charset.defaultCharset()到底是根据什么得到的?可不可以设置defaultCharset?
请大侠们瞧瞧。

解决方案 »

  1.   

    http://www.javaeye.com/topic/311583
      

  2.   

    这个我看过了,没有解决我的问题。
    按照官方文档所说,defaultCharset是根据JVM和底层环境得到。
    我的问题是,同一台机器同一个JVM为什么defaultCharset结果不同?
    也许有其它因素导致结果不同(Application和web程序环境确实存在不一样),
    如果可以更改此默认值如何更改,请高人解答。
      

  3.   

    Properties props = System.getProperties();
    System.out.println(props.get("file.encoding"));
    props.put("file.encoding","utf-8");
    System.out.println(props.get("file.encoding"));
      

  4.   

    改变Properties的file.encoding属性不会影响Charset.defaultCharset(),
    而defaultCharset关系到new String(byte[] b)的默认编码。
    如果没有改变defaultCharset的方法,就只能new String(byte[] b, "UTF-8")了。
      

  5.   

    跟java虚拟机环境有关系,可不可以修改local不知道,但是可以设置自己的。
      

  6.   

    defaultCharset是根据Java源文件的文件编码而来的。
    如果你的Java源文件自身的编码是GBK,则defaultCharset就是GBK;
    如果Java源文件自身的编码是UTF-8,则defaultCharset就是UTF-8。===========
    另外,编写与字符集相关的程序时,最好不要使用defaultCharset。
    因为Java源文件的编码与你要处理的字符编码可能不是同一种编码。byte[] bytes = ... ;
    String str = new String(bytes, Charset.forName("UTF-8"));如上例,使用明确的字符集编码比defaultCharset要清晰得多!
      

  7.   

    跟源文件有关我也考虑过,对于Application确实是如此。
    可我的web程序源文件编码也是UTF-8,更不可理解的是,在这个web程序里的Application执行结果defaultCharset就是UTF-8,可Action执行结果就是GBK。
    我觉得可能跟运行环境有关。
      

  8.   

    public static Charset defaultCharset()
    返回此 Java 虚拟机的默认 charset。
    默认 charset 在虚拟机启动时决定,通常根据语言环境和基础操作系统的 charset 来确定。
      

  9.   

    想知道怎么在操作系统里设置改变defaultCharset的?!