文件首行为空白行,为什么该行字符串长度为1(line.length()=1)
问题描述:最近编写程序遇到一个问题,文件首行的内容为空,但调用line0.length()返回的确为1 。如下图:
最初认为可能存在制表符,或者换行符的原因,于是调用了line0.trim();方法,but然并卵。如下图:
最后调用line0.getBytes();发现确实存在数据。如下图:
并且发现文件格式为utf8 BOM,如下图:
试验了gb2312,utf8,ASCII格式的文件,line0.length()均返回0,唯独utf8 BOM格式的文件line0.length()返回1,称之为BOM头"[-17 , -69 , - 65]".
结论:读取utf-8 BOM格式的文件首行字符串长度为首行内容字符串长度+1。
BOM头.length() = 1;
line0.length() = BOM头.length() + line0.length();
ps: 亲测utf8格式的文件经过windows记事本打开保存后,自动转换成utf8 BOM格式的文件.
挨踢狗个人观点:平常编辑文本时,尽量不要用windows记事本。