中文亂碼,之所以出現(xiàn)這種現(xiàn)象,根本原因是解析和編碼所按照的字符集不 同,而字符集是什么呢?
```
字符集(Character set)是多個字符的集合褒链,字符集種類較多,每個字符集包含的字符個數(shù)不同姻僧,常見字符集名稱:ASCII字符集、GB2312字符集蒲牧、BIG5字符集撇贺、 GB18030字符集、Unicode字符集等造成。計算機要準(zhǔn)確的處理各種字符集文字显熏,需要進行字符編碼,以便計算機能夠識別和存儲各種文字晒屎。```
注: GB系列中 GBK ==> GB2312 ==>GB18030 (2000年推出,現(xiàn)今最新的中文字符集,Windows系統(tǒng)下創(chuàng)建txt文件默認(rèn)是該編碼,當(dāng)然也是造成標(biāo)題問題的源頭)'
涉及到字符問題喘蟆,一般都會牽扯到文件解析等,接下來關(guān)于文件的介紹鼓鲁,稍作介紹:?
文件是指.exe,可執(zhí)行文件(外部命令)蕴轨;.com,可執(zhí)行文件(內(nèi)部命令);.cab,是安裝盤上的數(shù)據(jù)打包文件骇吭;.dll,動態(tài)鏈接庫文件等橙弱。
計算機文件(或稱文件、電腦檔案、檔案)棘脐,是存儲在某種長期儲存設(shè)備上的一段數(shù)據(jù)流斜筐。所謂“長期儲存設(shè)備”一般指磁盤、光盤蛀缝、磁帶等顷链。其特點是所存信息可以長期、多次使用屈梁,不會因為斷電而消失嗤练。
關(guān)于文件的類型與內(nèi)容
一種重要的文件是文本文件,是由一些字符的串行組成的在讶。二進制文件一般是指除了文本文件以外的文件煞抬。
關(guān)于文件的儲存方式
雖然一個文件表現(xiàn)為一個單一的流,但它經(jīng)常在磁盤不同的位置存儲為多個數(shù)據(jù)碎片(甚至是多個磁盤)构哺。操作系統(tǒng)會將它們組織成文件系統(tǒng)革答,每個文件放在特定的文件夾或目錄中。
文件是由軟件創(chuàng)建的遮婶,而且符合特定的文件格式蝗碎。'
```
不同的文件在序列化成二進制的時候會有不同的文件頭,但有些文件沒有特定的文件頭,比如txt,也有些文件頭是重復(fù)的,比如4D5A90 EXE 湖笨、4D5A90 dll 旗扑、4D5A90 OCX 、4D5A90 OLB 慈省、4D5A90 IMM 臀防、4D5A90 IME
```
言歸正傳,文件編譯成二級制文件后,按照http協(xié)議傳輸,設(shè)置好頭信息后,指定編碼,在這里又要引出一個問題, 在文件傳輸前為什么要設(shè)置請求頭信息呢?? 為什么要指定ContentType呢??
```
1.不可不知的MIME類型? ?:? ? MIME(Multipurpose Internet Mail Extension)類型是一種表示文檔的性質(zhì)和格式的標(biāo)準(zhǔn)化方法。在瀏覽器中使用MIME類型來告訴服務(wù)器確定如何處理文檔數(shù)據(jù)和顯示文檔边败,而不是通過文件擴展名袱衷。
2.MIME的格式? :? type/subtype
3.MIME嗅探? ?:? ?顧名思義,在瀏覽器(主要為IE)認(rèn)為文件的MIME類型錯誤或者沒有設(shè)置時自動設(shè)置正確的MIME類型笑窜。你可能會想這樣不是挺好的嗎? 能避免開發(fā)者或者是用戶設(shè)置了錯誤的MIME類型致燥,那么這種方式是否成為主流呢?
很遺憾排截,它有優(yōu)點嫌蚤,然而弊大于利。
?A -- 它違背了HTTP規(guī)范(大概為開發(fā)者能夠通過設(shè)置不同的MIME類型來處理文件)断傲。也因此脱吱,這種嗅探也使得用戶無法對瀏覽器處理文件的方式有所選擇
?B --? 對于具有危險性的可執(zhí)行文件,一般瀏覽器將其看為未知類型的二進制文件认罩,因此最多讓用戶選擇下載與否箱蝠,然而對于具有嗅探的IE瀏覽器來說,它會設(shè)置其為它認(rèn)為較為正確的MIME類型,這將會導(dǎo)致繞過下載選項而直接使該文件直接在用戶電腦運行宦搬,這是一個安全問題牙瓢。這有一篇關(guān)于MIME sniffing?“助紂為虐”的探討。
因此间校,最為合理的是讓用戶自己設(shè)置MIME類型
3 . ContentType? : contentType是實體頭一罩,用于指定交互數(shù)據(jù)(資源)的媒體類型。對于請求頭部或者響應(yīng)頭部都能夠出現(xiàn)撇簿。
contentType:[][,charset][,boundary]
mediaType: 文件MIME類型(非必須是正確的MIME類型
charset:編碼標(biāo)準(zhǔn)
boundary:區(qū)分每對key/value 的分割線聂渊,實質(zhì)為隨機的字符串
能讓瀏覽器正確處理上傳的數(shù)據(jù)通過一定的該設(shè)置的MIME類型的規(guī)定
```
接下來為何還是亂碼呢?? 都指定了數(shù)據(jù)類型,那么接下來了解下IOS的UTI吧
```
IOS為了整合文件傳輸是對文件指定的類型規(guī)范不統(tǒng)一退出的UTI模式, 被認(rèn)為是下一代MIME
格式為public.xxx(文件后綴名)? ? ? ? ? 詳細資料太亂? 對ios不了解? 有大神歡迎指正
```
最終處理方式:? ? ?服務(wù)器端解析文件,將內(nèi)容原封不動內(nèi)嵌瀏覽器的方式傳入移動端,ios和安卓正常接收但這顯然不是最佳方式.