为什么从项目中拷贝出来的utf-8编码的文件,就可以正常打开?而手工创建的非ANSI编码(如课程中的utf-8编码的“联”文件)的文件打开时就会乱码?二者有何区别?
一切都是由于BOM
当我们直接在记事本中直接创建文本文件,
不使用另存为
那么文本文件默认以ansi编码来保存文字信息,却没有给他加上BOM,
(BOM)就是该文本编码格式的标记,用来告诉记事本(或者其他软件这里面的内容有什么编码来解析)
另存为这个过程就是加了BOM
你没有另存为就没有BOM
那么问题来了
记事本说“mdzz,这到底要我怎么解析呢?没办法,一个个试吧,诶!“
由于默认的联通,联,在用ANSI保存时,编码格式类似UTF-8,所以解析为utf-8,而联想不符合utf-8编码规则
于是乎
内容就生气了
“。。。。。。。。我明明是以ANSI锁的的,你却用utf-8的钥匙来打开我,,,不开心(~……~),乱码吧,啊哈哈哈”
我为了3积分打这么多字也不容易啊,点个赞吧,谢谢!
另外补充下
BOM:在一个文本文件或者一段字符编码前加上几个固定的字节用于识别:
EF BB BF - 我是UTF-8
FF FE - 我是UTF-16LE
FE FF - 我是UTF-16BE
兄弟,不要拿那个"联"来说事,你试试其他的,Java是面向对象高度封装的,前期学习过多考虑底层实现不利于学习,打个比方,别人把各种工具都做好了,你只要知道怎么用就行了,会用工具就能干事,你非要知道工具是怎么做的,时间会不够的。再说一句,那个“联”真是一个巧合。
电脑上默认ANSI 而那个联文件是一种巧合,创建出来的是utf-8,但里面的文字是ANSI编码存放的,这个针对的是电脑的ANSI 认不出 这个直接创建的utf-8,由于字节可以是任何编码,文件是存储这些编码的地方,那个直接拷贝出来的utf-8的文件,只是保证了本身自己的编码规则。
简单的说用什么编码,就用什么解码