目录

文件编码与http字符集

文件都不包含编码方式,只是简单的byte,但是这些个byte其实是由某个人写的字然后编码保存而成,所以它对应着某种编码,所以要正确的打开它就需要正确的编码,不然的话是可以打开,但是显示不正确

文件永远是byte

http编码方式,通过charset来支持,如果header中charset 不对,自动返回utf-8或者默认

http显示图片不需要charset,因为charset针对字符,图片无论如何都不能解释成字符串,它不需要编码

那么http如何解释txt文件中的字符呢

首先看charset,如果行直接解释,如果不行,返回默认字符编码比如utf-8这个取决于浏览器

http如何传递bytes,byte[]传送给http时是数字字符串,这个取决于服务端怎么接受这个字符串,http只接受字符串,如果它看到content-type='image/jpeg'它将直接保存这些数字,因为不需要编码,如果看到text/plain;charset=iso-8895-1它就知道这是文本并且编码是iso-8895-1,具体拿来干嘛那是服务端的事情,

浏览器要聪明一些,它会根本content-type来做一些事情,比如content-type="image/jpeg"它就会解释为图片,如果content-type="text/html"就会解释为html文件,如果content-type="text/plain"这个就复杂了,可能是文本,可能是image,video,这个时候字节码自己会有头文件信息,再来分析到底是什么

content-type 后面的charset也是指导性作用,不是绝对的,如果charset=iso-8895-1而实际编码是utf-8,浏览器还是解释成utf-8,不然会乱码,这是浏览器智能的地方

一般来讲现在不管是文件还是浏览器都是utf-8作为默认编码方式和解码方式,个别例外,浏览器自行设置例外

很多编码只是看不懂,不通顺,不一定是乱码,一大坨黑色的问号才是真的乱码

iso-8859-1竟然可以和字节码来回转换,这是一种碰巧?反正utf-8不行,asc也不行,估计是字符不够

所有的字符都有编码,而字节码一定没有编码,而且不一定对应着编码(比如文件),如果字节码是文字则需要对应的编码才能还原