一、问题描述
在写代码的时候,读取字节流的时候,一般需要转化成 字符串,此时就涉及到编码问题。一般文件是用啥 编码 存的,取的时候就用 此编码读取。 在写读的时候,一般建议指定编码。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;elsedefaultCharset = forName("UTF-8");}}return defaultCharset;}【我们经常使用IDE eclipse ,对defaultCharset有啥影响呢?】此是以General ->Workspace中的text File encoding 可以设置全部的编码。单个文件可以单独设置。 当在eclipse运行代码时,是以 运行的此文件为准的。
1、-Dfile.encoding=GBK 指定defaultCharset。
2、如果没有指定,系统会根据时区、操作系统的相关信息来获取。
3、eclipse中需要注意文件的编码。