现在的位置: 首页 > 综合 > 正文

java jvm defaultCharset问题

2013年05月26日 ⁄ 综合 ⁄ 共 1675字 ⁄ 字号 评论关闭

一、问题描述

在写代码的时候,读取字节流的时候,一般需要转化成 字符串,此时就涉及到编码问题。
一般文件是用啥 编码 存的,取的时候就用 此编码读取。 在写读的时候,一般建议指定编码。
BufferedReader br = new BufferedReader(new InputStreamReader(is));最好写成
BufferedReader br = new BufferedReader(new InputStreamReader(is,encoding));
encoding一般需要猜测文件的编码。嘿嘿。。。。
【如果没有指定编码,系统是如何读取编码的呢?】
defaultCharset是默认编码,依赖于本地。(

 可以如此来指定:-Dfile.encoding=GBK)

【如果 也没有用-Dfile.encoding指定呢?】
则会依赖于locate
系统的代码如下:【请用openjdk查看Charset类,大约580行】
  private static volatile Charset defaultCharset;
    /**
     * Returns the default charset of this Java virtual machine.
     *
     * <p> The default charset is determined during virtual-machine startup and
     * typically depends upon the locale and charset of the underlying
     * operating system.
     *
     * @return  A charset object for the default charset
     *
     * @since 1.5
     */
    public static Charset defaultCharset() {
        if (defaultCharset == null) {
            synchronized (Charset.class) {
                String csn = AccessController.doPrivileged(
                    new GetPropertyAction("file.encoding"));
                Charset cs = lookup(csn);
                if (cs != null)
                    defaultCharset = cs;
                else
                    defaultCharset = forName("UTF-8");
            }
        }
        return defaultCharset;
    }
【我们经常使用IDE eclipse ,对defaultCharset有啥影响呢?】
 此是以General ->Workspace中的text File encoding 可以设置全部的编码。
 单个文件可以单独设置。 当在eclipse运行代码时,是以 运行的此文件为准的。

二、总结

1、-Dfile.encoding=GBK 指定defaultCharset。
2、如果没有指定,系统会根据时区、操作系统的相关信息来获取。
3、eclipse中需要注意文件的编码。

【上篇】
【下篇】

抱歉!评论已关闭.