Utf-8與ansi編碼識(shí)別方法以及裝置制造方法
【專利摘要】本發(fā)明實(shí)施例公開(kāi)了UTF-8與ANSI編碼識(shí)別方法,用于識(shí)別區(qū)分文件到底是UTF-8還是ANSI的編碼方式,避免因使用錯(cuò)誤的編碼方式解析文件而出現(xiàn)文件顯示亂碼的情況。本發(fā)明實(shí)施例方法包括:S1:獲取文件的數(shù)據(jù)流;S2:將所述數(shù)據(jù)流以字節(jié)的形式存儲(chǔ)為數(shù)組;S3:判斷所述數(shù)組是否存在前序字節(jié),若是,則刪除所述前序字節(jié)后執(zhí)行步驟S4,若否,則執(zhí)行步驟S4;S4:判斷所述數(shù)組中是否存在第一字節(jié),若是,則刪除所述第一字節(jié)后執(zhí)行步驟S5,若否,則執(zhí)行步驟S5;S5:判斷所述數(shù)組中是否存在第二字節(jié)或第三字節(jié),若是,則所述文件的編碼方式為ANSI,若否,則所述文件的編碼方式為UTF-8。本發(fā)明實(shí)施例還提供UTF-8與ANSI編碼識(shí)別裝置。
【專利說(shuō)明】UTF-8與ANSI編碼識(shí)別方法以及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及編碼領(lǐng)域,尤其涉及UTF-8與ANSI編碼識(shí)別方法以及裝置。
【背景技術(shù)】
[0002]ASCII是基于拉丁字母的一套電腦編碼系統(tǒng)。它主要用于顯示現(xiàn)代英語(yǔ)和其他西歐語(yǔ)言。它是現(xiàn)今最通用的單字節(jié)編碼系統(tǒng)。但是由于ASCII碼只有128個(gè)字符,無(wú)法表示世界上所有語(yǔ)言字符。不同的國(guó)家和地區(qū)制定了不同的標(biāo)準(zhǔn),由此產(chǎn)生了 GB2312,BIG5,JIS等各自的編碼標(biāo)準(zhǔn)。這些使用2個(gè)字節(jié)來(lái)代表一個(gè)字符的各種漢字延伸編碼方式,稱為ANSI (American National Standards Institute,美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì)的標(biāo)準(zhǔn)碼)。
[0003]UTF-8 (8-bit Unicode Transformation Format,萬(wàn)國(guó)碼)是一種針對(duì) Unicode 的可變長(zhǎng)度字符編碼,也是一種前綴碼。它可以用來(lái)表示UNIC0DE(單一碼、統(tǒng)一碼)標(biāo)準(zhǔn)中的任何字符,且其編碼中的第一個(gè)字節(jié)與ASCII兼容,這使得原來(lái)處理ASCII字符的軟件無(wú)須或只須做少部份修改,即可繼續(xù)使用。因此,它逐漸成為電子郵件、網(wǎng)頁(yè)及其他存儲(chǔ)或傳送文字的應(yīng)用中,優(yōu)先采用的編碼。
[0004]UTF-8是一種變長(zhǎng)字節(jié)編碼方式。對(duì)于某一個(gè)字符的UTF-8編碼,如果只有一個(gè)字節(jié)則其最高二進(jìn)制位為O ;如果是多字節(jié),其第一個(gè)字節(jié)從最高位開(kāi)始,連續(xù)的二進(jìn)制位值為I的個(gè)數(shù)決定了其編碼的位數(shù),其余各字節(jié)均以10開(kāi)頭。UTF-8最多可用到6個(gè)字節(jié)。一般用到的文本UNICODE碼值只有兩個(gè)字節(jié),可以表述65536個(gè)字符,足以表述世界上所有通用字符。所有我們通常用到的文本,UTF-8編碼方式,最多用3個(gè)字節(jié)足夠。
[0005]UTF-8編碼如下:
[0006]I 字節(jié) Oxxxxxxx
[0007]2 字節(jié) I IOxxxxx IOxxxxxx (0xC080-0xDFBF0x80-0x7FF)
[0008]3 字節(jié) 11 IOxxxx IOxxxxxx IOxxxxxx
[0009](0xE08080-0xEFBFBF0x800-0xFFFF)
[0010]BOM(字節(jié)順序標(biāo)記,Byte Order Mark)常被用來(lái)當(dāng)作標(biāo)示文件,是UTF-8、UTF_16或UTF-32編碼的記號(hào),位于文件流最開(kāi)始的幾個(gè)字節(jié)。其中,UTF-8的BOM為EF BB BF,而UNICODE 的 BOM 為 FF FE 或者 FE FF。
[0011]在現(xiàn)有的應(yīng)用中,ANSI和UTF-8都經(jīng)常被使用到。雖然ANSI和UTF-8的編碼方式不同,但是編碼方法類似甚至有重疊的編碼區(qū)域,有一定概率將UTF-8編碼格式的文本文件錯(cuò)誤地當(dāng)做ANSI編碼格式文件來(lái)解析顯示。如果文本文件或者文本數(shù)據(jù)流使用了錯(cuò)誤的編碼方式解析,會(huì)造成字符解析錯(cuò)誤,從而造成文本顯示亂碼。例如,在TXT文檔中輸入“聯(lián)通”2字,當(dāng)TXT文檔中一切字符都在CO ( AA(第一個(gè)字節(jié))(DF、80 ( BB (第二個(gè)字節(jié))< BF這個(gè)范圍時(shí),notepad (純文本編輯器)都無(wú)法確認(rèn)文檔的格式,沒(méi)有自動(dòng)依照UTF-8格式來(lái)顯示。而〃聯(lián)通〃就是ClAA⑶AS,剛好在上面的范圍內(nèi),所以不能正常顯現(xiàn)。
[0012]因此,亟需一種能夠識(shí)別區(qū)分UTF-8與ANSI的不同編碼方式,避免因使用錯(cuò)誤的編碼方式解析文件而出現(xiàn)文件顯示亂碼的情況的方法。
【發(fā)明內(nèi)容】
[0013]本發(fā)明實(shí)施例提供了一種UTF-8與ANSI編碼識(shí)別方法以及裝置,能夠識(shí)別區(qū)分文件到底是UTF-8還是ANSI的編碼方式,避免因使用錯(cuò)誤的編碼方式解析文件而出現(xiàn)文件顯示亂碼的情況。
[0014]本發(fā)明實(shí)施例提供的一種UTF-8與ANSI編碼識(shí)別方法,包括:
[0015]S1:獲取文件的數(shù)據(jù)流;
[0016]S2:將所述數(shù)據(jù)流以字節(jié)的形式存儲(chǔ)為數(shù)組,所述數(shù)組包括字節(jié)元素,所述字節(jié)元素由字節(jié)組成;
[0017]S3:判斷所述數(shù)組是否存在前序字節(jié),若是,則刪除所述前序字節(jié)后執(zhí)行步驟S4,若否,則執(zhí)行步驟S4;
[0018]S4:判斷所述數(shù)組中是否存在第一字節(jié),若是,則刪除所述第一字節(jié)后執(zhí)行步驟S5,若否,則執(zhí)行步驟S5,所述第一字節(jié)為所述數(shù)組中字節(jié)元素的數(shù)值處于預(yù)置的第一編碼范圍內(nèi)的字節(jié)元素;
[0019]S5:判斷所述數(shù)組中是否存在第二字節(jié)或第三字節(jié),若是,則所述文件的編碼方式為ANSI,若否,則所述文件的編碼方式為UTF-8 ;
[0020]所述第二字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第二編碼范圍外的字節(jié)元素,所述第二字節(jié)由兩個(gè)字節(jié)組成;
[0021]所述第三字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第三編碼范圍外的字節(jié)元素,所述第三字節(jié)由三個(gè)字節(jié)組成。
[0022]可選地,步驟S4具體包括:
[0023]遍歷所述數(shù)組,若所述數(shù)組中存在第一字節(jié),則刪除所述第一字節(jié),直到遍歷結(jié)束后執(zhí)行步驟S5,若所述數(shù)組中不存在第一字節(jié),則在遍歷結(jié)束后執(zhí)行步驟S5 ;
[0024]所述第一字節(jié)為所述數(shù)組中字節(jié)元素的數(shù)值處于預(yù)置的第一編碼范圍內(nèi)的字節(jié)元素。
[0025]可選地,步驟S5具體包括:
[0026]遍歷所述數(shù)組,若所述數(shù)組中存在第二字節(jié)或第三字節(jié),則所述文件的編碼方式為ANSI,若所述數(shù)組中不存在第二字節(jié)或第三字節(jié),則所述文件的編碼方式為UTF-8。
[0027]可選地,步驟S3具體包括:
[0028]S31:判斷所述數(shù)組是否存在前序字節(jié),若是,則執(zhí)行步驟S32,若否,則執(zhí)行步驟
S4;
[0029]S32:判斷所述前序字節(jié)是否為UTF-8或UNICODE的Β0Μ,若是,則執(zhí)行步驟S33,若否,則刪除所述前序字節(jié)后執(zhí)行步驟S4 ;
[0030]S33:若所述前序字節(jié)為UTF-8的Β0Μ,則所述文件的編碼方式為UTF-8,若所述前序字節(jié)為UNICODE的Β0Μ,則所述文件的編碼方式為UNICODE。
[0031 ] 可選地,所述方法還包括:
[0032]按照所述文件的編碼方式解析顯示所述文件。
[0033]本發(fā)明實(shí)施例中提供的一種UTF-8與ANSI編碼識(shí)別裝置,包括:
[0034]獲取模塊,用于獲取文件的數(shù)據(jù)流;[0035]存儲(chǔ)模塊,用于將所述數(shù)據(jù)流以字節(jié)的形式存儲(chǔ)為數(shù)組,所述數(shù)組包括字節(jié)元素,所述字節(jié)元素由字節(jié)組成;
[0036]第一判斷模塊,用于判斷所述數(shù)組是否存在前序字節(jié),若是,則刪除所述前序字節(jié)后觸發(fā)第二判斷模塊,若否,則觸發(fā)第二判斷模塊;
[0037]所述第二判斷模塊,用于判斷所述數(shù)組中是否存在第一字節(jié),若是,則刪除所述第一字節(jié)后觸發(fā)第三判斷模塊,若否,則觸發(fā)第三判斷模塊,所述第一字節(jié)為所述數(shù)組中字節(jié)元素的數(shù)值處于預(yù)置的第一編碼范圍內(nèi)的字節(jié)元素;
[0038]所述第三判斷模塊,用于判斷所述數(shù)組中是否存在第二字節(jié)或第三字節(jié),若是,則所述文件的編碼方式為ANSI,若否,則所述文件的編碼方式為UTF-8 ;
[0039]所述第二字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第二編碼范圍外的字節(jié)元素,所述第二字節(jié)由兩個(gè)字節(jié)組成;
[0040]所述第三字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第三編碼范圍外的字節(jié)元素,所述第三字節(jié)由三個(gè)字節(jié)組成。
[0041 ] 可選地,所述第二判斷模塊具體包括:
[0042]第一遍歷單元,用于遍歷所述數(shù)組,直到遍歷結(jié)束后觸摸第三判斷模塊;
[0043]第二判斷單元,用于在執(zhí)行所述第一遍歷單元的過(guò)程中判斷所述數(shù)組中是否存在第一字節(jié),若是,則刪除所述第一字節(jié);
[0044]所述第一字節(jié)為所述數(shù)組中字節(jié)元素的數(shù)值處于預(yù)置的第一編碼范圍內(nèi)的字節(jié)元素。
[0045]可選地,所述第三判斷模塊具體包括:
[0046]第二遍歷單元,用于遍歷所述數(shù)組;
[0047]第三判斷單元,用于在執(zhí)行所述第二遍歷單元的過(guò)程中判斷所述數(shù)組中是否存在第二字節(jié)或第三字節(jié),若是,則所述文件的編碼方式為ANSI,若否,則所述文件的編碼方式為 UTF-8。
[0048]可選地,所述第一判斷模塊具體包括:
[0049]第一判斷單元,用于判斷所述數(shù)組是否存在前序字節(jié),若是,則觸發(fā)辨識(shí)單元,若否,則觸發(fā)第二判斷模塊;
[0050]所述辨識(shí)單元,用于判斷所述前序字節(jié)是否為UTF-8或UNICODE的Β0Μ,若是,則觸發(fā)區(qū)分單元,若否,則刪除所述前序字節(jié)后觸發(fā)第二判斷模塊;
[0051]所述區(qū)分單元,用于若所述前序字節(jié)為UTF-8的Β0Μ,則確定所述文件的編碼方式為UTF-8,若所述前序字節(jié)為UNICODE的Β0Μ,則確定所述文件的編碼方式為UNICODE。
[0052]可選地,所述UTF-8與ANSI編碼識(shí)別裝置還包括:
[0053]解析顯示模塊,用于按照所述文件的編碼方式解析顯示所述文件。
[0054]從以上技術(shù)方案可以看出,本發(fā)明實(shí)施例具有以下優(yōu)點(diǎn):
[0055]本發(fā)明實(shí)施例中,S1:獲取文件的數(shù)據(jù)流;S2:將所述數(shù)據(jù)流以字節(jié)的形式存儲(chǔ)為數(shù)組,所述數(shù)組包括字節(jié)元素,所述字節(jié)元素由字節(jié)組成;S3:判斷所述數(shù)組是否存在前序字節(jié),若是,則刪除所述前序字節(jié)后執(zhí)行步驟S4,若否,則執(zhí)行步驟S4 ;S4:判斷所述數(shù)組中是否存在第一字節(jié),若是,則刪除所述第一字節(jié)后執(zhí)行步驟S5,若否,則執(zhí)行步驟S5,所述第一字節(jié)為所述數(shù)組中字節(jié)元素的數(shù)值處于預(yù)置的第一編碼范圍內(nèi)的字節(jié)元素;S5:判斷所述數(shù)組中是否存在第二字節(jié)或第三字節(jié),若是,則所述文件的編碼方式為ANSI,若否,則所述文件的編碼方式為UTF-8 ;所述第二字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第二編碼范圍外的字節(jié)元素,所述第二字節(jié)由兩個(gè)字節(jié)組成;所述第三字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第三編碼范圍外的字節(jié)元素,所述第三字節(jié)由三個(gè)字節(jié)組成。在本發(fā)明實(shí)施例中,通過(guò)對(duì)文件數(shù)據(jù)流以字節(jié)的形式進(jìn)行拆開(kāi)分析,分別對(duì)第一字節(jié)、第二字節(jié)、第三字節(jié)進(jìn)行判斷篩選,從而根據(jù)ANSI和UTF-8的特性來(lái)判斷所述文件使用的編碼方式,能夠識(shí)別區(qū)分所述文件到底是UTF-8還是ANSI的編碼方式,避免因使用錯(cuò)誤的編碼方式解析文件而出現(xiàn)文件顯示亂碼的情況。
【專利附圖】
【附圖說(shuō)明】
[0056]圖1為本發(fā)明實(shí)施例中UTF-8與ANSI編碼識(shí)別方法一個(gè)實(shí)施例流程圖;
[0057]圖2為本發(fā)明實(shí)施例中UTF-8與ANSI編碼識(shí)別方法另一個(gè)實(shí)施例流程圖;
[0058]圖3為本發(fā)明實(shí)施例中UTF-8與ANSI編碼識(shí)別裝置一個(gè)實(shí)施例結(jié)構(gòu)圖;
[0059]圖4為本發(fā)明實(shí)施例中UTF-8與ANSI編碼識(shí)別裝置另一個(gè)實(shí)施例結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0060]本發(fā)明實(shí)施例提供了 UTF-8與ANSI編碼識(shí)別方法以及裝置,用于識(shí)別區(qū)分文件到底是UTF-8還是ANSI的編碼方式,避免因使用錯(cuò)誤的編碼方式解析文件而出現(xiàn)文件顯示亂碼的情況。
[0061]為使得本發(fā)明的發(fā)明目的、特征、優(yōu)點(diǎn)能夠更加的明顯和易懂,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,下面所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而非全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0062]請(qǐng)參閱圖1,本發(fā)明實(shí)施例中UTF-8與ANSI編碼識(shí)別方法一個(gè)實(shí)施例包括:
[0063]S1:獲取文件的數(shù)據(jù)流;
[0064]在需要識(shí)別某個(gè)文件的編碼方式前,需要先獲取該文件的數(shù)據(jù)流。
[0065]S2:將該數(shù)據(jù)流以字節(jié)的形式存儲(chǔ)為數(shù)組;
[0066]獲取該文件的數(shù)據(jù)流后,可以將該數(shù)據(jù)流以字節(jié)的形式存儲(chǔ)為數(shù)組,該數(shù)組包括字節(jié)元素,該字節(jié)元素由字節(jié)組成。
[0067]S3:判斷該數(shù)組是否存在前序字節(jié),若是,則執(zhí)行步驟S301,若否,則執(zhí)行步驟S4 ;
[0068]將該數(shù)據(jù)流以字節(jié)的形式存儲(chǔ)為數(shù)組之后,可以判斷該數(shù)組是否存在前序字節(jié),若是,則執(zhí)行步驟S301,若否,則執(zhí)行步驟S4。
[0069]S301:刪除該前序字節(jié)后執(zhí)行步驟S4 ;
[0070]當(dāng)該數(shù)組中存在前序字節(jié)時(shí),刪除該前序字節(jié)后執(zhí)行步驟S4。
[0071]S4:判斷該數(shù)組中是否存在第一字節(jié),若是,則執(zhí)行步驟S401,若否,則執(zhí)行步驟
S5;
[0072]經(jīng)過(guò)步驟S3之后,該數(shù)組中不再存在前序字節(jié),此時(shí),可以判斷該數(shù)組中是否存在第一字節(jié),若是,則執(zhí)行步驟S401,若否,則執(zhí)行步驟S5,該第一字節(jié)為該數(shù)組中字節(jié)元素的數(shù)值處于預(yù)置的第一編碼范圍內(nèi)的字節(jié)元素。
[0073]S401:刪除該第一字節(jié)后執(zhí)行步驟S5 ;
[0074]當(dāng)該數(shù)組中存在第一字節(jié)時(shí),刪除該第一字節(jié)后執(zhí)行步驟S5。
[0075]S5:判斷該數(shù)組中是否存在第二字節(jié)或第三字節(jié),若是,則執(zhí)行步驟S501,若否,則執(zhí)行步驟S502 ;
[0076]經(jīng)過(guò)步驟S4之后,該數(shù)組中不再存在第一字節(jié),此時(shí),可以判斷該數(shù)組中是否存在第二字節(jié)或第三字節(jié),若是,則執(zhí)行步驟S501,若否,則執(zhí)行步驟S502。
[0077]需要說(shuō)明的是,該第二字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第二編碼范圍外的字節(jié)元素,該第二字節(jié)由兩個(gè)字節(jié)組成;該第三字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第三編碼范圍外的字節(jié)元素,該第三字節(jié)由三個(gè)字節(jié)組成。
[0078]S501:該文件的編碼方式為ANSI ;
[0079]當(dāng)該數(shù)組中存在第二字節(jié)或第三字節(jié)時(shí),該文件的編碼方式為ANSI。
[0080]S502:該文件的編碼方式為UTF-8。
[0081]當(dāng)該數(shù)組中不存在第二字節(jié)或第三字節(jié)時(shí),則該文件的編碼方式為UTF-8。
[0082]本實(shí)施例中,前面所說(shuō)的UTF-8與ANSI編碼識(shí)別方法步驟為:S1:獲取文件的數(shù)據(jù)流;S2:將該數(shù)據(jù)流以字節(jié)的形式存儲(chǔ)為數(shù)組,該數(shù)組包括字節(jié)元素,該字節(jié)元素由字節(jié)組成;S3:判斷該數(shù)組是否存在前序字節(jié),若是,則刪除該前序字節(jié)后執(zhí)行步驟S4,若否,則執(zhí)行步驟S4 ;S4:判斷該數(shù)組中是否存在第一字節(jié),若是,則刪除該第一字節(jié)后執(zhí)行步驟S5,若否,則執(zhí)行步驟S5,該第一字節(jié)為該數(shù)組中字節(jié)元素的數(shù)值處于預(yù)置的第一編碼范圍內(nèi)的字節(jié)元素;S5:判斷該數(shù)組中是否存在第二字節(jié)或第三字節(jié),若是,則該文件的編碼方式為ANSI,若否,則該文件的編碼方式為UTF-8 ;該第二字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第二編碼范圍外的字節(jié)元素,該第二字節(jié)由兩個(gè)字節(jié)組成;該第三字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第三編碼范圍外的字節(jié)元素,該第三字節(jié)由三個(gè)字節(jié)組成。在本實(shí)施例中,通過(guò)對(duì)文件數(shù)據(jù)流以字節(jié)的形式進(jìn)行拆開(kāi)分析,分別對(duì)第一字節(jié)、第二字節(jié)、第三字節(jié)進(jìn)行判斷篩選,從而根據(jù)ANSI和UTF-8的特性來(lái)判斷該文件使用的編碼方式,能夠識(shí)別區(qū)分該文件到底是UTF-8還是ANSI的編碼方式,避免因使用錯(cuò)誤的編碼方式解析文件而出現(xiàn)文件顯示亂碼的情況。
[0083]為便于理解,下面對(duì)本發(fā)明實(shí)施例中的UTF-8與ANSI編碼識(shí)別方法進(jìn)行詳細(xì)描述,請(qǐng)參閱圖2,本發(fā)明實(shí)施例中UTF-8與ANSI編碼識(shí)別方法另一個(gè)實(shí)施例包括:
[0084]201、獲取文件的數(shù)據(jù)流;
[0085]在需要識(shí)別某個(gè)文件的編碼方式前,需要先獲取該文件的數(shù)據(jù)流。
[0086]202、將該數(shù)據(jù)流以字節(jié)的形式存儲(chǔ)為數(shù)組;
[0087]獲取該文件的數(shù)據(jù)流后,可以將該數(shù)據(jù)流以字節(jié)的形式存儲(chǔ)為數(shù)組,該數(shù)組包括字節(jié)元素,該字節(jié)元素由字節(jié)組成。
[0088]需要說(shuō)明的是,該數(shù)據(jù)流可以為二進(jìn)制的數(shù)據(jù)流,然后通過(guò)二進(jìn)制的字節(jié)形式存儲(chǔ)為數(shù)組,該數(shù)組可以為八進(jìn)制、十進(jìn)制或十六進(jìn)制。具體此處不作限定。
[0089]203、判斷該數(shù)組是否存在前序字節(jié),若是,則執(zhí)行步驟204,若否,則執(zhí)行步驟207 ;
[0090]將該數(shù)據(jù)流以字節(jié)的形式存儲(chǔ)為數(shù)組之后,可以判斷該數(shù)組是否存在前序字節(jié),若是,則執(zhí)行步驟204,若否,則執(zhí)行步驟207。
[0091]需要說(shuō)明的是,數(shù)組由字節(jié)元素組成,而字節(jié)元素由字節(jié)組成,數(shù)組中可能存在前序字節(jié),這些前序字節(jié)主要排在數(shù)據(jù)流的前頭部分,即最開(kāi)始的若干個(gè)字節(jié)。這些前序字節(jié)主要作為字節(jié)順序標(biāo)記(BOM)存在,通過(guò)前序字節(jié)的標(biāo)記可以快速地獲知該文件是以哪種編碼格式(可以為UTF-8或UNICODE)編碼的。
[0092]204、判斷該前序字節(jié)是否為UTF-8或UNICODE的Β0Μ,若是,則執(zhí)行步驟206,若否,則執(zhí)行步驟205;
[0093]在獲知該數(shù)組存在前序字節(jié)之后,可以判斷該前序字節(jié)是否為UTF-8或UNICODE的Β0Μ,若是,則執(zhí)行步驟206,若否,則執(zhí)行步驟205。其中UTF-8的BOM為EF BB BF (十六進(jìn)制),而UNICODE的BOM為FF FE (十六進(jìn)制)或者FE FF (十六進(jìn)制,下文類似表達(dá)均為十六進(jìn)制的,不再贅述)。
[0094]205、刪除該前序字節(jié)后執(zhí)行步驟207 ;
[0095]若該前序字節(jié)并不是UTF-8的Β0Μ,也不是UNICODE的Β0Μ,則刪除該前序字節(jié)后執(zhí)行步驟207。
[0096]206、若該前序字節(jié)為UTF-8的Β0Μ,則該文件的編碼方式為UTF-8,若該前序字節(jié)為UNICODE的Β0Μ,則該文件的編碼方式為UNICODE ;
[0097]當(dāng)該前序字節(jié)為UTF-8或UNICODE的BOM時(shí),則可以知道,若該前序字節(jié)為UTF-8的Β0Μ,則該文件的編碼方式為UTF-8,若該前序字節(jié)為UNICODE的Β0Μ,則該文件的編碼方式為 UNICODE。
[0098]例如,當(dāng)該前序字節(jié)為EF BB BF時(shí),則該文件的編碼方式為UTF-8,當(dāng)該前序字節(jié)為FF FE或者FE FF時(shí),則該文件的編碼方式為UNICODE。
[0099]需要說(shuō)明的是,通過(guò)對(duì)前序字節(jié)的識(shí)別判斷可以快速地獲知到該文件的編碼方式,而無(wú)需再執(zhí)行其它復(fù)雜的識(shí)別判斷,在很多情況下可以提高識(shí)別效率,節(jié)省識(shí)別時(shí)間。
[0100]207、遍歷該數(shù)組,判斷該數(shù)組中是否存在第一字節(jié),若是,則執(zhí)行步驟208,若否,則在遍歷結(jié)束后執(zhí)行步驟209 ;
[0101]在通過(guò)對(duì)該數(shù)組的前序字節(jié)的判斷或處理之后,可以確保此時(shí)該數(shù)組不存在前序字節(jié),此時(shí)可以遍歷該數(shù)組,判斷該數(shù)組中是否存在第一字節(jié),若是,則執(zhí)行步驟208,若否,則在遍歷結(jié)束后執(zhí)行步驟209??梢岳斫獾氖?,通過(guò)遍歷的運(yùn)算,可以確保做到在遍歷結(jié)束后,該數(shù)組中的字節(jié)元素均被訪問(wèn)了 一遍,且每個(gè)字節(jié)元素僅訪問(wèn)一遍,可以避免重復(fù)訪問(wèn)和訪問(wèn)遺漏的問(wèn)題,從而可以最大程度地保證該數(shù)組的所有第一字節(jié)均被找出。
[0102]需要說(shuō)明的是,該第一字節(jié)為該數(shù)組中字節(jié)元素的數(shù)值處于預(yù)置的第一編碼范圍內(nèi)的字節(jié)元素。例如,假如設(shè)定該第一編碼范圍可以為0X00-0X7F(十六進(jìn)制,下文類似表達(dá)均為十六進(jìn)制的,不再贅述),則該第一字節(jié)為UTF-8的I字符的碼值范圍,在該碼值范圍中UTF-8和ANSI的編碼方式通用,與UNICODE編碼的0x00_0x7F碼值一樣,因此均可以按照UNICODE碼值來(lái)解析顯示,不會(huì)產(chǎn)生亂碼。
[0103]208、刪除該第一字節(jié),直到遍歷結(jié)束后執(zhí)行步驟209 ;
[0104]在遍歷該數(shù)組的過(guò)程中,每當(dāng)發(fā)現(xiàn)一個(gè)該第一字節(jié),則刪除該第一字節(jié),直到遍歷結(jié)束后執(zhí)彳了步驟209。
[0105]209、遍歷該數(shù)組,判斷該數(shù)組中是否存在第二字節(jié)或第三字節(jié),若是,則執(zhí)行步驟210,若否,則執(zhí)行步驟211 ;
[0106]在遍歷查找該數(shù)組中的第一字節(jié)之后,可以確保此時(shí)該數(shù)組中不存在第一字節(jié),此時(shí)可以判斷該數(shù)組中是否存在第二字節(jié)或第三字節(jié),若是,則執(zhí)行步驟210,若否,則執(zhí)行步驟211。
[0107]需要說(shuō)明的是,該第二字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第二編碼范圍外的字節(jié)元素,該第二字節(jié)由兩個(gè)字節(jié)組成;該第三字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第三編碼范圍外的字節(jié)元素,該第三字節(jié)由三個(gè)字節(jié)組成。
[0108]需要說(shuō)明的是,在文件的數(shù)據(jù)流編碼中,需要顯示出來(lái)的字符通過(guò)若干個(gè)字節(jié)的組合或者單個(gè)字節(jié)來(lái)表示,如I個(gè)字節(jié)、2個(gè)字節(jié)、3個(gè)字節(jié)等,這些組合在一起的字節(jié)可以認(rèn)為是一個(gè)字節(jié)元素,即該數(shù)組中的字節(jié)元素。因此,該字節(jié)元素也可以由I個(gè)字節(jié)、2個(gè)字節(jié)、3個(gè)字節(jié)來(lái)組成。在步驟209中,遍歷該數(shù)組時(shí),是對(duì)每個(gè)字節(jié)元素進(jìn)行遍歷,而并非對(duì)每個(gè)字節(jié)進(jìn)行遍歷(若該字節(jié)元素由一個(gè)字節(jié)組成,則對(duì)該字節(jié)進(jìn)行遍歷訪問(wèn))。所以,可以理解的是,該第二字節(jié)和該第三字節(jié)均屬于字節(jié)元素,其中第二字節(jié)為2個(gè)字節(jié)組成的字節(jié)元素,而第三字節(jié)則為由3個(gè)字節(jié)組成的字節(jié)元素。
[0109]從UTF-8和ANSI的編碼特性中可以分析看出來(lái),只要合理地預(yù)置該第二編碼范圍和該第三編碼范圍,可以通過(guò)第二字節(jié)和第三字節(jié)來(lái)識(shí)別這兩種編碼方式。例如,預(yù)置第二編碼范圍為0xC080-0xDFBF,而第三編碼范圍為0xE08080_0xEFBFBF,當(dāng)存在任意一個(gè)第二字節(jié)或第三字節(jié)時(shí),則表示該數(shù)組中存在一個(gè)2字節(jié)的字節(jié)元素在0xC080-0xDFBF范圍之外或一個(gè)3字節(jié)的字節(jié)元素在0xE08080-0xEFBFBF范圍之外。通過(guò)查看UTF-8的2字符和3字符的編碼方式可以知道,UTF-8中的2字節(jié)的字節(jié)元素均在0xC080-0xDFBF范圍內(nèi),3字節(jié)的字節(jié)元素均在0xE08080-0xEFBFBF范圍內(nèi)。因此該文件的編碼方式不可能為UTF-8,因此可以確定該文件的編碼方式為ANSI??梢岳斫獾氖?,上述0xC080-0xDFBF范圍(第二編碼范圍)和0xE08080-0xEFBFBF范圍(第三編碼范圍)并不是唯一的范圍,此處僅用于舉例說(shuō)明,實(shí)際應(yīng)用中可以通過(guò)預(yù)置不同的范圍達(dá)到同一效果,此處不作限定。
[0110]210、該文件的編碼方式為ANSI ;
[0111]當(dāng)該數(shù)組中存在第二字節(jié)或第三字節(jié)時(shí),則可以確定該文件的編碼方式為ANSI。
[0112]211、該文件的編碼方式為UTF-8 ;
[0113]當(dāng)該數(shù)組中不存在第二字節(jié)或第三字節(jié)時(shí),則可以確定該文件的編碼方式為UTF-8。
[0114]212、按照該文件的編碼方式解析顯示該文件。
[0115]在確定了該文件的編碼方式之后,可以按照該文件的編碼方式解析顯示該文件。
[0116]在本實(shí)施例中,通過(guò)對(duì)文件數(shù)據(jù)流以字節(jié)的形式進(jìn)行拆開(kāi)分析,分別對(duì)第一字節(jié)、第二字節(jié)、第三字節(jié)進(jìn)行判斷篩選,從而根據(jù)ANSI和UTF-8的特性來(lái)判斷該文件使用的編碼方式,能夠識(shí)別區(qū)分該文件到底是UTF-8還是ANSI的編碼方式,避免因使用錯(cuò)誤的編碼方式解析文件而出現(xiàn)文件顯示亂碼的情況。更進(jìn)一步地,通過(guò)對(duì)前序字節(jié)的判斷和識(shí)別,若該前序字節(jié)符合條件,可以快速地確定該文件是UTF-8還是UNICODE的編碼方式,可以提高了識(shí)別編碼方式的效率,減少識(shí)別所用的時(shí)間。
[0117]在本實(shí)施例中,該文件可以表示以二進(jìn)制方式存儲(chǔ)的可以顯示字符的文件。常見(jiàn)的有電子書(shū)txt文件,歌詞Irc文件,視頻字幕文件等。[0118]為便于理解,根據(jù)圖2所描述的實(shí)施例,下面以一個(gè)實(shí)際應(yīng)用場(chǎng)景對(duì)本發(fā)明實(shí)施例中的UTF-8與ANSI編碼識(shí)別方法進(jìn)行描述:
[0119]應(yīng)用場(chǎng)景一:
[0120]1、假設(shè)獲取一個(gè)文件的數(shù)據(jù)流后,存儲(chǔ)的數(shù)組為(EF BB BF) (CC FF) (EF Β0ΒΒ),可以看出,該數(shù)組由前序字節(jié)、一個(gè)2個(gè)字節(jié)的字節(jié)元素、一個(gè)3字節(jié)的字節(jié)元素組成。
[0121]2、判斷該前序字節(jié)(EF BB BF)為UTF-8的Β0Μ,則可以確定該文件的編碼方式為UTF-8。
[0122]應(yīng)用場(chǎng)景二:
[0123]1、假設(shè)獲取一個(gè)文件的數(shù)據(jù)流后,存儲(chǔ)的數(shù)組為(FF FE) (CC FF) (EF Β0ΒΒ),可以看出,該數(shù)組由前序字節(jié)、一個(gè)2個(gè)字節(jié)的字節(jié)元素、一個(gè)3字節(jié)的字節(jié)元素組成。
[0124]2、判斷該前序字節(jié)(FF FE)為UNICODE的Β0Μ,則可以確定該文件的編碼方式為UNICODEο
[0125]應(yīng)用場(chǎng)景三:
[0126]1、假設(shè)獲取一個(gè)文件的數(shù)據(jù)流后,存儲(chǔ)的數(shù)組為(FOFE) (CC FF) (EF Β0ΒΒ),可以看出,該數(shù)組由前序字節(jié)、一個(gè)2個(gè)字節(jié)的字節(jié)元素、一個(gè)3字節(jié)的字節(jié)元素組成。
[0127]2、無(wú)法識(shí)別該前序字節(jié)(R)FE),既不是UTF-8的Β0Μ,也不是UNICODE的Β0Μ,則刪除該前序字節(jié),此時(shí)數(shù)組變?yōu)?cc FF) (EF Β0ΒΒ)。
[0128]3、遍歷該數(shù)組,該數(shù)組不存在0X00-0X7F的字節(jié)元素,因此無(wú)需處理。
[0129]4、遍歷該數(shù)組,發(fā)現(xiàn)該數(shù)組中(CC FF)在0xC080_0xDFBF的范圍內(nèi),且(EF Β0ΒΒ)在0xE08080-0xEFBFBF范圍內(nèi),則可以確定該文件的編碼方式為UTF-8。
[0130]應(yīng)用場(chǎng)景四:
[0131]1、假設(shè)獲取一個(gè)文件的數(shù)據(jù)流后,存儲(chǔ)的數(shù)組為(OD) (CC FF) (FF Β0ΒΒ),可以看出,該數(shù)組由一個(gè)I個(gè)字節(jié)的字節(jié)元素、一個(gè)2個(gè)字節(jié)的字節(jié)元素、一個(gè)3字節(jié)的字節(jié)元素組成。
[0132]2、該數(shù)組不存在前序字節(jié),直接進(jìn)行下一步。
[0133]3、遍歷該數(shù)組,該數(shù)組中的(OD)在0x00-0x7F的范圍內(nèi),則刪除(OD),該數(shù)組變成(CC FF)(FF Β0ΒΒ)。
[0134]4、遍歷該數(shù)組,發(fā)現(xiàn)該數(shù)組中(CC FF)在0xC080_0xDFBF的范圍內(nèi),但是(FFΒ0ΒΒ)在0xE08080-0xEFBFBF范圍外,因此可以確定該文件的編碼方式為ANSI。
[0135]可以理解的是,上述四個(gè)應(yīng)用場(chǎng)景相對(duì)簡(jiǎn)單同時(shí)也相對(duì)基礎(chǔ),該四個(gè)應(yīng)用場(chǎng)景可以具體到電子書(shū)瀏覽器讀取電子書(shū)、播放器訪問(wèn)歌詞文件等更為具體的場(chǎng)景中,可以知道的是,在具體的場(chǎng)景中處理的方式類似,不再贅述。
[0136]上面主要描述了 UTF-8與ANSI編碼識(shí)別方法,下面將對(duì)UTF-8與ANSI編碼識(shí)別裝置進(jìn)行詳細(xì)的描述,請(qǐng)參閱圖3,本發(fā)明實(shí)施例中UTF-8與ANSI編碼識(shí)別裝置一個(gè)實(shí)施例包括:
[0137]獲取模塊301,用于獲取文件的數(shù)據(jù)流;
[0138]存儲(chǔ)模塊302,用于將該數(shù)據(jù)流以字節(jié)的形式存儲(chǔ)為數(shù)組,該數(shù)組包括字節(jié)元素,該字節(jié)元素由字節(jié)組成;
[0139]第一判斷模塊303,用于判斷該數(shù)組是否存在前序字節(jié),若是,則刪除該前序字節(jié)后觸發(fā)第二判斷模塊304,若否,則觸發(fā)第二判斷模塊304 ;
[0140]該第二判斷模塊304,用于判斷該數(shù)組中是否存在第一字節(jié),若是,則刪除該第一字節(jié)后觸發(fā)第三判斷模塊305,若否,則觸發(fā)第三判斷模塊305,該第一字節(jié)為該數(shù)組中字節(jié)元素的數(shù)值處于預(yù)置的第一編碼范圍內(nèi)的字節(jié)元素;
[0141]該第三判斷模塊305,用于判斷該數(shù)組中是否存在第二字節(jié)或第三字節(jié),若是,則該文件的編碼方式為ANSI,若否,則該文件的編碼方式為UTF-8。
[0142]需要說(shuō)明的是,該第二字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第二編碼范圍外的字節(jié)元素,該第二字節(jié)由兩個(gè)字節(jié)組成;該第三字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第三編碼范圍外的字節(jié)元素,該第三字節(jié)由三個(gè)字節(jié)組成。
[0143]本實(shí)施例中,首先,獲取模塊301獲取文件的數(shù)據(jù)流;然后,存儲(chǔ)模塊302將該數(shù)據(jù)流以字節(jié)的形式存儲(chǔ)為數(shù)組;再之,第一判斷模塊303判斷該數(shù)組是否存在前序字節(jié),若是,則刪除該前序字節(jié)后觸發(fā)第二判斷模塊304,若否,則觸發(fā)第二判斷模塊304 ;而該第二判斷模塊304判斷該數(shù)組中是否存在第一字節(jié),若是,則刪除該第一字節(jié)后觸發(fā)第三判斷模塊305,若否,則觸發(fā)第三判斷模塊305 ;最后,該第三判斷模塊305判斷該數(shù)組中是否存在第二字節(jié)或第三字節(jié),若是,則該文件的編碼方式為ANSI,若否,則該文件的編碼方式為UTF-8。在本實(shí)施例中,通過(guò)對(duì)文件數(shù)據(jù)流以字節(jié)的形式進(jìn)行拆開(kāi)分析,分別對(duì)第一字節(jié)、第二字節(jié)、第三字節(jié)進(jìn)行判斷篩選,從而根據(jù)ANSI和UTF-8的特性來(lái)判斷該文件使用的編碼方式,能夠識(shí)別區(qū)分該文件到底是UTF-8還是ANSI的編碼方式,避免因使用錯(cuò)誤的編碼方式解析文件而出現(xiàn)文件顯示亂碼的情況。
[0144]為便于理解,下面對(duì)本發(fā)明實(shí)施例中的UTF-8與ANSI編碼識(shí)別裝置進(jìn)行詳細(xì)描述,請(qǐng)參閱圖4,本發(fā)明實(shí)施例中UTF-8與ANSI編碼識(shí)別裝置另一個(gè)實(shí)施例包括:
[0145]獲取模塊401,用于獲取文件的數(shù)據(jù)流;
[0146]存儲(chǔ)模塊402,用于將該數(shù)據(jù)流以字節(jié)的形式存儲(chǔ)為數(shù)組,該數(shù)組包括字節(jié)元素,該字節(jié)元素由字節(jié)組成;
[0147]第一判斷模塊403,用于判斷該數(shù)組是否存在前序字節(jié),若是,則刪除該前序字節(jié)后觸發(fā)第二判斷模塊404,若否,則觸發(fā)第二判斷模塊404 ;
[0148]該第二判斷模塊404,用于判斷該數(shù)組中是否存在第一字節(jié),若是,則刪除該第一字節(jié)后觸發(fā)第三判斷模塊405,若否,則觸發(fā)第三判斷模塊405,該第一字節(jié)為該數(shù)組中字節(jié)元素的數(shù)值處于預(yù)置的第一編碼范圍內(nèi)的字節(jié)元素;
[0149]該第三判斷模塊405,用于判斷該數(shù)組中是否存在第二字節(jié)或第三字節(jié),若是,則該文件的編碼方式為ANSI,若否,則該文件的編碼方式為UTF-8。
[0150]需要說(shuō)明的是,該第二字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第二編碼范圍外的字節(jié)元素,該第二字節(jié)由兩個(gè)字節(jié)組成;該第三字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第三編碼范圍外的字節(jié)元素,該第三字節(jié)由三個(gè)字節(jié)組成。
[0151]本實(shí)施例中該第二判斷模塊404具體包括:
[0152]第一遍歷單元4041,用于遍歷該數(shù)組,直到遍歷結(jié)束后觸摸第三判斷模塊405 ;
[0153]第二判斷單元4042,用于在執(zhí)行該第一遍歷單元4041的過(guò)程中判斷該數(shù)組中是否存在第一字節(jié),若是,則刪除該第一字節(jié)。
[0154]需要說(shuō)明的是,該第一遍歷單元4041可以遍歷整個(gè)數(shù)組,使得在判斷該數(shù)組中是否存在第一字節(jié)時(shí),不會(huì)重復(fù)訪問(wèn)數(shù)組中的字節(jié)元素,也不會(huì)遺漏數(shù)組中的字節(jié)元素。
[0155]本實(shí)施例中該第三判斷模塊405具體包括:
[0156]第二遍歷單元4051,用于遍歷該數(shù)組;
[0157]第三判斷單元4052,用于在執(zhí)行該第二遍歷單元的過(guò)程中判斷該數(shù)組中是否存在第二字節(jié)或第三字節(jié),若是,則該文件的編碼方式為ANSI,若否,則該文件的編碼方式為UTF-8。
[0158]本實(shí)施例中該第一判斷模塊403具體包括:
[0159]第一判斷單元4031,用于判斷該數(shù)組是否存在前序字節(jié),若是,則觸發(fā)辨識(shí)單元4032,若否,則觸發(fā)第二判斷模塊404 ;
[0160]該辨識(shí)單元4032,用于判斷該前序字節(jié)是否為UTF-8或UNICODE的Β0Μ,若是,則觸發(fā)區(qū)分單元4033,若否,則刪除該前序字節(jié)后觸發(fā)第二判斷模塊404 ;
[0161]該區(qū)分單元4033,用于若該前序字節(jié)為UTF-8的Β0Μ,則確定該文件的編碼方式為UTF-8,若該前序字節(jié)為UNICODE的Β0Μ,則確定該文件的編碼方式為UNICODE。
[0162]需要說(shuō)明的是,第一判斷單元4031、辨識(shí)單元4032和區(qū)分單元4033共同組成了對(duì)該前序字節(jié)進(jìn)行判斷識(shí)別的機(jī)構(gòu),可以通過(guò)對(duì)前序字節(jié)的識(shí)別來(lái)初步確認(rèn)該文件的編碼方式是否為UTF-8或者UNICODE,有利于提高識(shí)別的效率。
[0163]本實(shí)施例中該UTF-8與ANSI編碼識(shí)別裝置還包括:
[0164]解析顯示模塊406,用于按照該文件的編碼方式解析顯示該文件。
[0165]所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,上述描述的系統(tǒng),裝置和單元的具體工作過(guò)程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過(guò)程,在此不再贅述。
[0166]在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過(guò)其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
[0167]所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。
[0168]另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
[0169]所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤(pán)、移動(dòng)硬盤(pán)、只讀存儲(chǔ)器(ROM,Read-OnlyMemory)、隨機(jī)存取存儲(chǔ)器(RAM, Random Access Memory)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
[0170]以上所述,以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。
【權(quán)利要求】
1.一種UTF-8與ANSI編碼識(shí)別方法,其特征在于,包括: S1:獲取文件的數(shù)據(jù)流; S2:將所述數(shù)據(jù)流以字節(jié)的形式存儲(chǔ)為數(shù)組,所述數(shù)組包括字節(jié)元素,所述字節(jié)元素由字節(jié)組成; S3:判斷所述數(shù)組是否存在前序字節(jié),若是,則刪除所述前序字節(jié)后執(zhí)行步驟S4,若否,則執(zhí)行步驟S4; S4:判斷所述數(shù)組中是否存在第一字節(jié),若是,則刪除所述第一字節(jié)后執(zhí)行步驟S5,若否,則執(zhí)行步驟S5,所述第一字節(jié)為所述數(shù)組中字節(jié)元素的數(shù)值處于預(yù)置的第一編碼范圍內(nèi)的字節(jié)元素; S5:判斷所述數(shù)組中是否存在第二字節(jié)或第三字節(jié),若是,則所述文件的編碼方式為ANSI,若否,則所述文件的編碼方式為UTF-8 ; 所述第二字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第二編碼范圍外的字節(jié)元素,所述第二字節(jié)由兩個(gè)字節(jié)組成; 所述第三字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第三編碼范圍外的字節(jié)元素,所述第三字節(jié)由三個(gè)字節(jié)組成。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟S4具體包括: 遍歷所述數(shù)組,若所述數(shù)組中存在第一字節(jié),則刪除所述第一字節(jié),直到遍歷結(jié)束后執(zhí)行步驟S5,若所述數(shù)組中不存在第一字節(jié),則在遍歷結(jié)束后執(zhí)行步驟S5 ; 所述第一字節(jié)為所述數(shù)組中字節(jié)元素的數(shù)值處于預(yù)置的第一編碼范圍內(nèi)的字節(jié)元素。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟S5具體包括: 遍歷所述數(shù)組,若所述數(shù)組中存在第二字節(jié)或第三字節(jié),則所述文件的編碼方式為ANSI,若所述數(shù)組中不存在第二字節(jié)或第三字節(jié),則所述文件的編碼方式為UTF-8。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟S3具體包括: S31:判斷所述數(shù)組是否存在前序字節(jié),若是,則執(zhí)行步驟S32,若否,則執(zhí)行步驟S4 ; S32:判斷所述前序字節(jié)是否為UTF-8或UNICODE的B0M,若是,則執(zhí)行步驟S33,若否,則刪除所述前序字節(jié)后執(zhí)行步驟S4 ; S33:若所述前序字節(jié)為UTF-8的B0M,則所述文件的編碼方式為UTF-8,若所述前序字節(jié)為UNICODE的B0M,則所述文件的編碼方式為UNICODE。
5.根據(jù)權(quán)利要求1至4中任一項(xiàng)所述的方法,其特征在于,所述方法還包括: 按照所述文件的編碼方式解析顯示所述文件。
6.一種UTF-8與ANSI編碼識(shí)別裝置,其特征在于,包括: 獲取模塊,用于獲取文件的數(shù)據(jù)流; 存儲(chǔ)模塊,用于將所述數(shù)據(jù)流以字節(jié)的形式存儲(chǔ)為數(shù)組,所述數(shù)組包括字節(jié)元素,所述字節(jié)元素由字節(jié)組成; 第一判斷模塊,用于判斷所述數(shù)組是否存在前序字節(jié),若是,則刪除所述前序字節(jié)后觸發(fā)第二判斷模塊,若否,則觸發(fā)第二判斷模塊; 所述第二判斷模塊,用于判斷所述數(shù)組中是否存在第一字節(jié),若是,則刪除所述第一字節(jié)后觸發(fā)第三判斷模塊,若否,則觸發(fā)第三判斷模塊,所述第一字節(jié)為所述數(shù)組中字節(jié)元素的數(shù)值處于預(yù)置的第一編碼范圍內(nèi)的字節(jié)元素;所述第三判斷模塊,用于判斷所述數(shù)組中是否存在第二字節(jié)或第三字節(jié),若是,則所述文件的編碼方式為ANSI,若否,則所述文件的編碼方式為UTF-8 ; 所述第二字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第二編碼范圍外的字節(jié)元素,所述第二字節(jié)由兩個(gè)字節(jié)組成; 所述第三字節(jié)為字節(jié)元素的數(shù)值處于預(yù)置的第三編碼范圍外的字節(jié)元素,所述第三字節(jié)由三個(gè)字節(jié)組成。
7.根據(jù)權(quán)利要求6所述的UTF-8與ANSI編碼識(shí)別裝置,其特征在于,所述第二判斷模塊具體包括: 第一遍歷單元,用于遍歷所述數(shù)組,直到遍歷結(jié)束后觸摸第三判斷模塊; 第二判斷單元,用于在執(zhí)行所述第一遍歷單元的過(guò)程中判斷所述數(shù)組中是否存在第一字節(jié),若是,則刪除所述第一字節(jié); 所述第一字節(jié)為所述數(shù)組中字節(jié)元素的數(shù)值處于預(yù)置的第一編碼范圍內(nèi)的字節(jié)元素。
8.根據(jù)權(quán)利要求6所述的UTF-8與ANSI編碼識(shí)別裝置,其特征在于,所述第三判斷模塊具體包括: 第二遍歷單元,用于遍歷所述數(shù)組; 第三判斷單元,用 于在執(zhí)行所述第二遍歷單元的過(guò)程中判斷所述數(shù)組中是否存在第二字節(jié)或第三字節(jié),若是,則所述文件的編碼方式為ANSI,若否,則所述文件的編碼方式為UTF-8。
9.根據(jù)權(quán)利要求6所述的UTF-8與ANSI編碼識(shí)別裝置,其特征在于,所述第一判斷模塊具體包括: 第一判斷單元,用于判斷所述數(shù)組是否存在前序字節(jié),若是,則觸發(fā)辨識(shí)單元,若否,則觸發(fā)第二判斷模塊; 所述辨識(shí)單元,用于判斷所述前序字節(jié)是否為UTF-8或UNICODE的B0M,若是,則觸發(fā)區(qū)分單元,若否,則刪除所述前序字節(jié)后觸發(fā)第二判斷模塊; 所述區(qū)分單元,用于若所述前序字節(jié)為UTF-8的B0M,則確定所述文件的編碼方式為UTF-8,若所述前序字節(jié)為UNICODE的B0M,則確定所述文件的編碼方式為UNICODE。
10.根據(jù)權(quán)利要求6至9中任一項(xiàng)所述的UTF-8與ANSI編碼識(shí)別裝置,其特征在于,所述UTF-8與ANSI編碼識(shí)別裝置還包括: 解析顯示模塊,用于按照所述文件的編碼方式解析顯示所述文件。
【文檔編號(hào)】G06F17/30GK103970913SQ201410232089
【公開(kāi)日】2014年8月6日 申請(qǐng)日期:2014年5月28日 優(yōu)先權(quán)日:2014年5月28日
【發(fā)明者】姚方謀 申請(qǐng)人:廣州視源電子科技股份有限公司