中文乱码,之所以出现这种现象,根本原因是解析和编码所按照的字符集不 同,而字符集是什么呢?
```
字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。```
注: GB系列中 GBK ==> GB2312 ==>GB18030 (2000年推出,现今最新的中文字符集,Windows系统下创建txt文件默认是该编码,当然也是造成标题问题的源头)'
涉及到字符问题,一般都会牵扯到文件解析等,接下来关于文件的介绍,稍作介绍:
文件是指.exe,可执行文件(外部命令);.com,可执行文件(内部命令);.cab,是安装盘上的数据打包文件;.dll,动态链接库文件等。
计算机文件(或称文件、电脑档案、档案),是存储在某种长期储存设备上的一段数据流。所谓“长期储存设备”一般指磁盘、光盘、磁带等。其特点是所存信息可以长期、多次使用,不会因为断电而消失。
关于文件的类型与内容
一种重要的文件是文本文件,是由一些字符的串行组成的。二进制文件一般是指除了文本文件以外的文件。
关于文件的储存方式
虽然一个文件表现为一个单一的流,但它经常在磁盘不同的位置存储为多个数据碎片(甚至是多个磁盘)。操作系统会将它们组织成文件系统,每个文件放在特定的文件夹或目录中。
文件是由软件创建的,而且符合特定的文件格式。'
```
不同的文件在序列化成二进制的时候会有不同的文件头,但有些文件没有特定的文件头,比如txt,也有些文件头是重复的,比如4D5A90 EXE 、4D5A90 dll 、4D5A90 OCX 、4D5A90 OLB 、4D5A90 IMM 、4D5A90 IME
```
言归正传,文件编译成二级制文件后,按照http协议传输,设置好头信息后,指定编码,在这里又要引出一个问题, 在文件传输前为什么要设置请求头信息呢? 为什么要指定ContentType呢?
```
1.不可不知的MIME类型 : MIME(Multipurpose Internet Mail Extension)类型是一种表示文档的性质和格式的标准化方法。在浏览器中使用MIME类型来告诉服务器确定如何处理文档数据和显示文档,而不是通过文件扩展名。
2.MIME的格式 : type/subtype
3.MIME嗅探 : 顾名思义,在浏览器(主要为IE)认为文件的MIME类型错误或者没有设置时自动设置正确的MIME类型。你可能会想这样不是挺好的吗? 能避免开发者或者是用户设置了错误的MIME类型,那么这种方式是否成为主流呢?
很遗憾,它有优点,然而弊大于利。
A -- 它违背了HTTP规范(大概为开发者能够通过设置不同的MIME类型来处理文件)。也因此,这种嗅探也使得用户无法对浏览器处理文件的方式有所选择
B -- 对于具有危险性的可执行文件,一般浏览器将其看为未知类型的二进制文件,因此最多让用户选择下载与否,然而对于具有嗅探的IE浏览器来说,它会设置其为它认为较为正确的MIME类型,这将会导致绕过下载选项而直接使该文件直接在用户电脑运行,这是一个安全问题。这有一篇关于MIME sniffing “助纣为虐”的探讨。
因此,最为合理的是让用户自己设置MIME类型
3 . ContentType : contentType是实体头,用于指定交互数据(资源)的媒体类型。对于请求头部或者响应头部都能够出现。
contentType:[][,charset][,boundary]
mediaType: 文件MIME类型(非必须是正确的MIME类型
charset:编码标准
boundary:区分每对key/value 的分割线,实质为随机的字符串
能让浏览器正确处理上传的数据通过一定的该设置的MIME类型的规定
```
接下来为何还是乱码呢? 都指定了数据类型,那么接下来了解下IOS的UTI吧
```
IOS为了整合文件传输是对文件指定的类型规范不统一退出的UTI模式, 被认为是下一代MIME
格式为public.xxx(文件后缀名) 详细资料太乱 对ios不了解 有大神欢迎指正
```
最终处理方式: 服务器端解析文件,将内容原封不动内嵌浏览器的方式传入移动端,ios和安卓正常接收但这显然不是最佳方式.