鄧 俊,吾守爾·斯拉木,艾尼宛爾·托乎提,袁廷磊,趙志成
(新疆大學 信息科學與工程學院,新疆 烏魯木齊 830046)
目前全球互聯(lián)網(wǎng)用戶總量已經(jīng)達到17億左右。市場調(diào)研公司Gartner的最新調(diào)查顯示手機將在2013年超越PC成為最流行的網(wǎng)頁瀏覽工具。3G無線網(wǎng)絡(luò)的快速發(fā)展以及智能手機的快速普及,尤其是基于Android平臺設(shè)備異軍突起,讓大家可以更加快速便捷的通過移動設(shè)備接入互聯(lián)網(wǎng)。
新疆是多民族聚居、多元文化融合的地區(qū),少數(shù)民族語言文字不僅是日常生活重要的交流工具,更作為民族文化的載體承載著各民族綿長的歷史和過往的繁榮。為讓更多的人了解中國新疆少數(shù)民族同胞文化,讓新疆多方面完美地展現(xiàn)全國走向世界,就需要借助互聯(lián)網(wǎng)的這一有力的臂膀。針對目前Android平臺在國內(nèi)市場的普及以及它自身具有的潛在發(fā)展力,結(jié)合新疆多種少數(shù)民族文化融合的背景,讓民族朋友通過Android手機瀏覽器訪問維吾爾文網(wǎng)站來共享互聯(lián)網(wǎng)信息是目前需要解決且具有應(yīng)用創(chuàng)新意義的事情。截至作者完稿時Android原生ROM手機及平板上的系統(tǒng)瀏覽器和第三方瀏覽器均不能正確顯示新疆少數(shù)民族文字網(wǎng)頁,存在字體支持不全以及字符不能連筆粘合等問題。
通過多款Android手機瀏覽器在訪問維文網(wǎng)站時出現(xiàn)的問題進行詳細對比和深入研究,總結(jié)出訪問維文網(wǎng)站需要攻克的難點,并設(shè)計維文瀏覽器架構(gòu),最后編碼實現(xiàn)維文瀏覽器。
維吾爾文屬于阿拉伯語系的拼音文字,它與現(xiàn)在各個平臺上可以處理的漢字和西文有很大的區(qū)別[1]。維吾爾文具有字符連筆、不等寬、右向輸入、單一字符在詞中因位置不同有不同形狀(首寫形、中寫形、尾寫形和獨寫形)等特點[2]。阿拉伯文在Unicode中有基本阿拉伯文(U+0060—U+06FF)和擴充阿拉伯文(U+FE70—U+FEFF)兩種格式。其中不但包含所有阿拉伯語字符和符號,還有一定的空間給予用戶擴充。維吾爾文借用阿拉伯語和部分波斯文字母,所以維吾爾文的編碼可以在阿拉伯文編碼的基礎(chǔ)上擴充[3]。維吾爾文的基本標準區(qū)編碼范圍在U+0600—U+06FF之間,用于進行信息交換、傳輸和保存。
維吾爾文字符分為名義字符形式和變體顯現(xiàn)形式[4]。其中名義字符形式是指在Unicode中有確定編碼的名義表現(xiàn)形式,屬于基本標準區(qū)編碼范圍;變體顯現(xiàn)形式是指字母字符由于在維吾爾文字中所處的位置的不同而實際顯現(xiàn)出不同形式的字符,屬于擴展區(qū)編碼范圍[5]。圖1所示是維文字母的名義形式以及依據(jù)所處單詞位置的不同而呈現(xiàn)的變體顯現(xiàn)形式。
維吾爾文單詞由一個或者多個字母組成,如前所述每個字母會根據(jù)所處單詞中位置的不同而發(fā)生形狀的變化并進行字符的連筆黏合[6],如圖2所示。
圖2 維文單詞組合及字符連筆黏合
(1) 網(wǎng)頁編碼及字體庫
網(wǎng)頁編碼以UTF-8編碼為主,UTF-8是一種支持多語言的國際化編碼格式,能夠讓不同語言操作系統(tǒng)和瀏覽器的用戶訪問各種語言文字網(wǎng)站時不用下載語言包即可正常瀏覽,維吾爾文網(wǎng)站亦采用UTF-8編碼。在字體方面,絕大部分維文網(wǎng)站掛載壓縮字庫EOT文件,少數(shù)維文網(wǎng)站掛載EOT字體庫的同時添加TTF字體。目前Android系統(tǒng)只支持TTF格式字體文件[7]?;贏ndroid WebKit內(nèi)核的瀏覽器訪問掛載EOT字體庫的網(wǎng)站時,瀏覽器調(diào)用Android系統(tǒng)字體庫,訪問掛載TTF字體的網(wǎng)站時,瀏覽器可以顯示網(wǎng)站引入的外部TTF字體效果。
(2) HTML解析及網(wǎng)頁掛載字體方法
網(wǎng)頁使用級聯(lián)樣式表CSS文件掛載外部字體,CSS內(nèi)容如:@font-face{font-family: "Alpida";src: url("/ulinix.eot");}。通過該代碼片段即可引入網(wǎng)站服務(wù)器中根域名下/ulinix.eot字體庫。
瀏覽器是基于超文本傳輸協(xié)議的客戶端軟件[9]。Android瀏覽器基于WebKit引擎,WebKit是開源的瀏覽器網(wǎng)頁排版引擎,包括WebCore排版引擎和JSCore腳本引擎,但Android 2.2開始采用Google自主研發(fā)的V8 JS解析引擎。Android 2.2、2.3和Chrome 5.0.328.0均采用WebKit r54731內(nèi)核版本。
Android SDK對WebKit進行了封裝,提供WebView接口供開發(fā)人員使用,無需了解WebKit細節(jié)就可以將瀏覽器集成到應(yīng)用程序中。項目使用WebView及其他Android SDK提供的接口在應(yīng)用層開發(fā)維文瀏覽器。
安卓市場的手機瀏覽器發(fā)展至今逐漸形成三大陣營。第一類是以Chrome、Firefox、360、海豚等瀏覽器為代表的陣營,這類瀏覽器的網(wǎng)頁解析工作大部分基于Android系統(tǒng)的WebKit內(nèi)核,F(xiàn)irefox基于Gecko內(nèi)核[10],特點是高度還原頁面特性,解析渲染出和電腦版瀏覽器一樣的效果;第二類是以UC瀏覽器(U2內(nèi)核)、Opera Mini(歐朋)、QQ、百度等瀏覽器為代表的陣營,采用服務(wù)器/客戶端混合運算架構(gòu),這類瀏覽器的內(nèi)核實際在“云端”,通過服務(wù)器對網(wǎng)頁數(shù)據(jù)進行實時壓縮處理,然后下發(fā)到客戶端解析,特點是可以快速獲取頁面內(nèi)容,并節(jié)省網(wǎng)絡(luò)流量;第三類是UC8.0.6及以上版本 (U3內(nèi)核)的自主內(nèi)核瀏覽器。第三代UC內(nèi)核采用無損云壓縮引擎技術(shù),對頁面的解析和渲染完全依靠U3內(nèi)核,不再依靠服務(wù)器。與U2內(nèi)核的云壓縮引擎不同,無損云壓縮引擎不會對頁面進行轉(zhuǎn)碼,只對頁面中的部分可壓縮元素進行處理,發(fā)送到客戶端后再對壓縮過的數(shù)據(jù)進行解壓。使用U3內(nèi)核不僅可以對網(wǎng)頁進行無損的完全解析,而且可以實現(xiàn)云端架構(gòu)獨有的省流量、高效等特點[11]。
發(fā)展至今,國內(nèi)外Android市場的手機瀏覽器在訪問維吾爾文網(wǎng)頁時仍均出現(xiàn)文字顯示異常的現(xiàn)象。這是由于阿拉伯語語系文字具有字符連筆、不等寬、右向輸入、單一字符在詞中因位置不同有不同形狀等特點導致Webkit內(nèi)核或云服務(wù)器端不能正確解析維文造成的。要正確顯示維文網(wǎng)頁就必須架構(gòu)維文網(wǎng)頁渲染引擎。
通過多款瀏覽器對維文網(wǎng)址導航(www.ulinix.com)網(wǎng)站進行訪問得出訪問效果對比表(表1)。
表1 維文網(wǎng)頁瀏覽效果對比表
續(xù)表
1) 若網(wǎng)頁服務(wù)器端掛載EOT格式字體庫,Android瀏覽器調(diào)用系統(tǒng)TTF字體渲染導致維文字符顯示不全,出現(xiàn)方塊。
2) 維文字符沒有連筆粘合,即沒有完成字符之間的自動選形。
3) 網(wǎng)頁內(nèi)容還原失真。
正確顯示維文網(wǎng)頁需要解決三個問題:
1) 維文TTF字體庫的添加;
2) 維文字符自動選形;
3) 正確解析維文網(wǎng)頁。
Android系統(tǒng)從早期的Android 1.1到4.0版本,雖然在國際化方面逐漸改進和增強,但針對中國少數(shù)民族語言文字存在不兼容情況,且大部分手機生產(chǎn)廠商為考慮到手機硬件性能等各方面因素在定制手機ROM的時候閹割了不常用的模塊,其中包括對阿拉伯語系的支持。Android系統(tǒng)不能支持維吾爾文正確顯示是缺少維文字體庫和維文自動選形引擎。要讓瀏覽器支持維吾爾文網(wǎng)站就要在訪問網(wǎng)站時完成維文字體的添加和對網(wǎng)頁中維文字符完成自動選形處理。
最新的Android 4.0.3系統(tǒng)對阿拉伯語系文字顯示良好,但使用第三方瀏覽器(如歐朋、UC)等基于云服務(wù)或自主內(nèi)核的瀏覽器)訪問維文網(wǎng)頁時依然出現(xiàn)字符顯示不全和維文字符無自動選形的情況。
Android操作系統(tǒng)采用開源瀏覽器排版和渲染引擎WebKit[12],通過調(diào)用WebKit提供的各種接口和核心模塊實現(xiàn)網(wǎng)頁瀏覽器的各項功能。維文網(wǎng)頁解析引擎服務(wù)于UI顯示框架之下,用于完成自動選形及維文字體渲染的工作。瀏覽器架構(gòu)設(shè)計如圖3所示。
圖3 瀏覽器架構(gòu)圖
為讓手機瀏覽器能像電腦瀏覽器方便訪問互聯(lián)網(wǎng)上的各種維文網(wǎng)頁內(nèi)容和信息資源,手機瀏覽器主要需要實現(xiàn)以下功能:
1) 支持正確顯示維吾爾文網(wǎng)站內(nèi)容。
從以上所列史料可以看出,相較于宋初人的褒貶參半,南渡之后的眾人立場一致。司馬光之時北宋王朝根基已穩(wěn),但知識、思想與信仰世界的危機依然存在,因為要從根本上確立國家的權(quán)威和民族的信心,主要應(yīng)當依賴于人們對于同一文明和共同倫理的認同。 〔23〕(P177)
2) 支持常用的網(wǎng)絡(luò)傳輸協(xié)議,如HTTP、HTTPS、FTP、SSL、TLS。
3) 支持JAVASCRIPT腳本的事件觸發(fā)和執(zhí)行,解析網(wǎng)頁腳本實現(xiàn)對DOM樹的解析和操控。
4) 支持CSS實現(xiàn)其規(guī)則和屬性的解析和應(yīng)用。
5) 支持文件的多線程下載,實現(xiàn)對MIME文檔類型的識別和處理。
6) 支持多頁面的打開與頁面之間的手勢切換操作。
7) 支持夜間模式。
8) 支持瀏覽器用戶屬性設(shè)置。
9) 支持常用圖像文件格式。
圖4 維文網(wǎng)頁渲染引擎結(jié)構(gòu)
網(wǎng)頁渲染引擎又稱網(wǎng)頁排版引擎,負責取得網(wǎng)頁HTML、XML、CSS、圖像等內(nèi)容并進行字體庫的渲染。維文網(wǎng)頁渲染引擎的功能是在WebKit引擎的基礎(chǔ)上增加維文自動選形和維文字體渲染,結(jié)構(gòu)如圖4所示。將維文網(wǎng)頁HTML解析成DOM樹進行遍歷[13],渲染過程采用分段傳輸、分段解析渲染策略,分段解析HTML并完成自動選形及字體渲染。分段策略提高了效率,有利于瀏覽器的交互性能,但算法復雜度增加。
維文瀏覽器在請求URL并進行顯示時,先判斷該頁面的文字編碼區(qū)域,若屬于中英文網(wǎng)頁,則采用傳統(tǒng)瀏覽器請求顯示URL的方式,基于WebKit內(nèi)核并調(diào)用系統(tǒng)字體對網(wǎng)頁進行渲染顯示;若屬于維吾爾文網(wǎng)頁,則由維文網(wǎng)頁渲染引擎和WebKit同時對網(wǎng)頁進行渲染。URL請求流程如圖5所示。
維吾爾語在形態(tài)結(jié)構(gòu)上屬黏著語類型[14],處理維吾爾文自動選形的基本思想是把維吾爾語分解成若干個維吾爾文字符組成。把維吾爾語文本語料輸入自動選形模塊,該模塊依據(jù)前面輸入的維吾爾文字符和控制字符來確定當前維吾爾文的輸入狀態(tài),在接收到維吾爾文字符數(shù)據(jù)后,依據(jù)該狀態(tài)對維吾爾文字符或字符串進行選形, 按照字符在詞中出現(xiàn)的位置自動選擇其對應(yīng)的首寫形、中寫形、尾寫形或獨寫形字形編碼(擴展區(qū)編碼)來替換該維吾爾文字符標準區(qū)編碼, 使前后字母的字形能準確相連。設(shè)置當前需要選形的字符為i,則i-1和i+1分別是當前字符前面和后面的字符[15]。約定當 i-1,i,i+1字符值為0表示非維文字符或者特殊字符,字符值為1時表示維文字符,根據(jù)字符值的不同判斷字符的選形情況,使用N-S盒圖來表示自動選形模塊的算法和程序的運行流程,如圖6所示。
圖5 URL請求流程圖
圖6 自動選形算法N-S盒圖
Android WebView沒有提供掛載外部字體庫的接口,無法像其他控件調(diào)用setTypeface方法引入外部字庫。維文字體渲染模塊的核心算法是使用CSS引入Assets文件夾中的字庫,在自動選形的基礎(chǔ)上完成掛載維文字體。維文字庫渲染流程如圖7所示。
圖7 維文字庫渲染流程
Android 2.3系統(tǒng)瀏覽器訪問www.ulinix.com顯示效果如圖8所示;維文瀏覽器顯示效果如表2和圖9所示,比較得出該款Android手機維文瀏覽器解析維文網(wǎng)頁的顯示效果和IE電腦版瀏覽器的顯示效果一致,高度還原維文網(wǎng)頁頁面特性。
圖8 Android 2.3系統(tǒng)瀏覽器顯示效果
表2 維文網(wǎng)頁瀏覽效果對比表
通過Android平臺多款瀏覽器瀏覽維文網(wǎng)頁的顯示效果的對比和研究,結(jié)合維文文字特點,設(shè)計出正確顯示維吾爾文網(wǎng)頁的Android瀏覽器。該款自主研發(fā)的維文瀏覽器是國內(nèi)外首款脫離Android原生系統(tǒng)對維吾爾文不支持的影響,在應(yīng)用層進行維文網(wǎng)頁渲染引擎開發(fā)的Android瀏覽器。
然而新疆地區(qū)使用的語言除維吾爾語還有哈薩克語、柯爾克孜語,這三種語言的文字特點和語法習慣一致,只是個別字母的字符集編碼不一樣。通過對渲染引擎進行修改及補充,實現(xiàn)哈薩克語、柯爾克孜語文字網(wǎng)頁瀏覽器,這將大力推進新疆國民經(jīng)濟和社會信息化發(fā)展,加快少數(shù)民族地區(qū)信息化建設(shè)和促進信息產(chǎn)業(yè)發(fā)展。
[1] 繆成,袁保社,吾守爾·斯拉木,李莉.維、哈、柯、漢、英多文種處理平臺的設(shè)計與實現(xiàn)[J].計算機工程,2004,30(10):71-73.
[2] 靳簡明,丁曉青,彭良瑞,王華.印刷維吾爾文本切割[J].中文信息學報,2005,18(5):76-83.
[3] DB65/2190-2005,信息交換用維吾爾文、哈薩克文、柯爾克孜文編碼字符集、基本集與擴展集[S].
[4] 蘇國平,繆成,夏國平.基于OpenType的維哈柯文自動選形引擎的設(shè)計與實現(xiàn)[J].中文信息學報, 2007,21(4):116-121.
[5] 趙永進,郭大慶,盧有飛,等.維文軟件中排版關(guān)鍵技術(shù)的研究與實現(xiàn)[J].計算機工程與應(yīng)用,2007,43(22):106-108.
[6] 盧有飛,張偉,張巖,等.維文版Office設(shè)計中關(guān)鍵技術(shù)的研究與實現(xiàn)[J].中文信息學報,2007,21(2):112-116.
[7] 董治江,吳健,鐘義信.在ICU中實現(xiàn)少數(shù)民族文字的處理[J].中文信息學報,2004,18(2):66-72.
[8] Crescenzi V,Mecca G.Merialdo,P Roadrunner.Towards Automatic Data Extraction from Large Web Sites[A].In International Conference on Very Large Data Bases(VLDB2001)[C].Roma,Italy:September l,2001,1-14.
[9] 楊留慧,雷航,郭文生.嵌入式瀏覽器解析排版并行化研究與設(shè)計[J].計算機應(yīng)用,2011,31(12):331-332.
[10] Gecko[EB/OL].http://zh.wikipedia.org/wiki/Gecko.
[11] 瀏覽器[EBOL]. http://baike.baidu.com/view/7718.htm.
[12] Stringer,M.Sussex,Brighton,UK.The Webkit tangible user interface:a case study of iterative prototyping[J].Pervasive Computing,IEEE,2005,11(21):35-41.
[13] 張瑞雪,宋明秋.逆序解析DOM樹及網(wǎng)頁正文信息提取[J].計算機科學,2011,38(4):213-215.
[14] http://baike.baidu.com/view/3117338.htm中國少數(shù)民族語言文[DB/OL].
[15] 熱依曼·吐爾遜,吾守爾·斯拉木.維吾爾文手機輸入關(guān)鍵技術(shù)研究與實現(xiàn)[J].中文信息學報,2005,20(2):72-77.