成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

漢字轉(zhuǎn)拼音 支持20870個(gè)漢字,包含完整的多音字

cikenerd / 3033人閱讀

摘要:如果轉(zhuǎn)進(jìn)制,則位進(jìn)制只能表示個(gè)漢字,這個(gè)太少了。假設(shè)我們用個(gè)進(jìn)制的字符,則可以表示,表示個(gè)漢字綽綽有余,但這時(shí)候需要多個(gè)字符。

項(xiàng)目地址:https://github.com/xinglie/pi...

壓縮說明

為了便于在網(wǎng)絡(luò)上的傳輸,本人想辦法寫了一個(gè)壓縮算法,目前這個(gè)版本是壓縮好的,帶自解壓功能
以下說明壓縮思路:

理想狀態(tài)下是使用Stirng.prototype.localCompare了,但是由于這玩意并不是所有瀏覽器實(shí)現(xiàn)都一樣,例如chrome早期的就不是按拼音排序,所以這個(gè)方案先放一邊

那網(wǎng)上最常見的就是碼表了,比如{"a":"吖阿啊..."},這種形式的最可靠穩(wěn)定,但唯一不足的是碼表太大,漢字的范圍最常用的在 u4e00-u9fa5 這個(gè)區(qū)間里,其它區(qū)間的暫不考慮。這個(gè)區(qū)間有20928個(gè)漢字(后來經(jīng)我簡(jiǎn)單資料查找,發(fā)現(xiàn)這個(gè)區(qū)間里有些漢字并沒有對(duì)應(yīng)的拼音,也有些漢字無法正常顯示,所以被我精簡(jiǎn)到了20870個(gè)漢字了,當(dāng)然網(wǎng)上也有只把常用的幾千個(gè)漢字做為碼表的)。

現(xiàn)在的問題就來了,如果把這2w多個(gè)漢字做為碼表存在js文件里無異是非常大的,我們需要想辦法壓縮,而在壓縮前我們還有些問題需要解決:

如果存放js代碼的文件用utf-8來保存,那如果這個(gè)js被放在了gbk編碼的頁(yè)面上,并且script標(biāo)簽未指定charset utf-8,那么這個(gè)js中的漢字是會(huì)亂碼的,所以需要編碼,常用的是unicode成{"a":"u5416u963fu554a..."},這樣就不會(huì)有問題了。

如果用unicode編碼,則2w多個(gè)漢字大概需要12w個(gè)字符表示(一個(gè)漢字6個(gè)字符)。如何用字符最少的來表示這些漢字成了壓縮的關(guān)鍵

我們知道每個(gè)漢字都可以用charCodeAt取到相應(yīng)的數(shù)字編碼,也可以用String.fromCharCode進(jìn)行還原,例如:"我".charCodeAt(0);//20105;我們也可以用String.fromCharCode(20105)還原成"我"字,OK,到這一步,最小漢字是19968;最大是40896。如果把所有漢字用數(shù)字表示,則只需要10w個(gè)字符即可,1個(gè)漢字對(duì)應(yīng)5個(gè)數(shù)字(當(dāng)然,直接把這5位數(shù)字轉(zhuǎn)16進(jìn)制,則只需要4個(gè)就可以,2w多個(gè)漢字大約8w個(gè)字符,仍然很多)。

到這一步后,我給自已一個(gè)目標(biāo):能否用2個(gè)字符表示一個(gè)漢字?如果可以,那么大概只需要4w多字符就可以表示完,這個(gè)壓縮比對(duì)10w個(gè)字符還是相當(dāng)可喜的。

既然再壓縮,那就把剛才的 漢字的數(shù)字 20105再進(jìn)行壓縮,這時(shí)候我采取的是進(jìn)制轉(zhuǎn)換,比如把它轉(zhuǎn)成64進(jìn)制等盡可能大的進(jìn)制。如果轉(zhuǎn)64進(jìn)制,則2位64進(jìn)制只能表示4096個(gè)漢字,這個(gè)太少了。我需要自已寫一個(gè)大的進(jìn)制轉(zhuǎn)換,我把a(bǔ)scii碼表重新拿出來,128個(gè)字符,除了不顯示的,我挑中了從33到126之間的這些字符(除34,45,92三個(gè)外,因?yàn)槲倚枰殉绦虬l(fā)布到網(wǎng)上,別人可以復(fù)制粘貼之類的,所以需要可視字符),一共91個(gè)。那么91進(jìn)制2位數(shù)可表示91*91=8281個(gè),仍然不夠。

回頭再看漢字的區(qū)間,19968-40896 如果每個(gè)漢字都減去19968,則區(qū)間變成0-20928,如果把這個(gè)區(qū)間一分為2:0-10464 10465-20928,第二個(gè)區(qū)間每個(gè)漢字減去10465 則變成0-10463,至此2個(gè)區(qū)間各有1w個(gè)漢字,離我們的91進(jìn)制2位表示的8281比較接近了。

假設(shè)我們用3個(gè)91進(jìn)制的字符,則可以表示753571,表示2w個(gè)漢字綽綽有余,但這時(shí)候需要6w多個(gè)字符。如果我們使用91進(jìn)制的2個(gè)字符,每個(gè)區(qū)間共有2000多個(gè)無法被表示,如果剩余的這2000多個(gè)用3個(gè)字符表示,我們會(huì)發(fā)現(xiàn)這2000多個(gè)的高位一樣(xyz),都是"x";那么這時(shí)候大概需要4w加上2個(gè)6000,大概5w2k個(gè)字符即可表示完成。

當(dāng)然,我們要對(duì)3位的高位給一個(gè)特殊的字符,這樣我們?cè)龠€原的時(shí)候就很方便還原了,這不是難事,忽略不講

至此,我們就完成了壓縮,最后的js大約共58kb

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/87973.html

相關(guān)文章

  • 漢字轉(zhuǎn)拼音

    摘要:多拼音格式輸出支持支持多種拼音輸出格式帶音標(biāo)不帶音標(biāo)數(shù)字表示音標(biāo)以及拼音首字母輸出格式常見多音字識(shí)別支持常見多音字的識(shí)別,其中包括詞組成語地名等簡(jiǎn)繁體中文轉(zhuǎn)換經(jīng)對(duì)比以上三個(gè)類庫(kù),個(gè)人認(rèn)為更加適合。 1、目前在百度或谷歌上搜索java漢字轉(zhuǎn)拼音,主要有以下三種: 1)piny4j:搜索結(jié)果介紹文章最多的,然而此類庫(kù)對(duì)生僻字支持不好,轉(zhuǎn)換時(shí)會(huì)報(bào)空指針(java.lang.NullPoint...

    frank_fun 評(píng)論0 收藏0
  • 談?wù)勎易?em>拼音搜索一點(diǎn)經(jīng)驗(yàn)

    摘要:談?wù)勎易銎匆羲阉鞯囊稽c(diǎn)經(jīng)驗(yàn)需要注意的一些事情本文使用的為語言解決方案。當(dāng)然也我們可以自己實(shí)現(xiàn)轉(zhuǎn)換拼音的功能,如果這樣做,則需要在代碼中設(shè)定好中文字庫(kù)和對(duì)應(yīng)的拼音,同時(shí)特別注意多音字的處理。 談?wù)勎易銎匆羲阉鞯囊稽c(diǎn)經(jīng)驗(yàn) 需要注意的一些事情 本文使用的為 Java 語言解決方案。 搜索方法上,按照個(gè)人理解,有兩點(diǎn)關(guān)鍵: 分詞 將類似 women 這樣的詞分解成 women。經(jīng)過這...

    Eastboat 評(píng)論0 收藏0
  • 前端周刊第40期

    摘要:注意本文為前端周刊早期整理的舊文重發(fā),不過大部分內(nèi)容并沒有過時(shí),已經(jīng)看過的同學(xué)可以直接去文末訂閱前端周刊微信公眾號(hào)。想和我面對(duì)面交流掃下方二維碼添加我為好友。 注意:本文為前端周刊早期整理的舊文重發(fā),不過大部分內(nèi)容并沒有過時(shí),已經(jīng)看過的同學(xué)可以直接去文末訂閱前端周刊微信公眾號(hào)。 文章教程 號(hào)外:ES6 模塊語法已定稿 www.2ality.com ES6 模塊語法已定稿,和之前所看到的...

    Carbs 評(píng)論0 收藏0
  • PHP漢字轉(zhuǎn)拼音

    摘要:最簡(jiǎn)單最準(zhǔn)確的中文轉(zhuǎn)拼音的類項(xiàng)目地址支持獲取拼音以及拼音的縮寫即首字母支持等編碼能準(zhǔn)確匹配千多個(gè)常用漢字單個(gè)漢字,一句話,中英文混合都完美支持例子版早上好獲取拼音早上好獲取拼音縮寫例子版早上好獲取拼音早上好獲取拼音縮寫 最簡(jiǎn)單、最準(zhǔn)確的PHP中文轉(zhuǎn)拼音的類 github項(xiàng)目地址:https://github.com/jifei/Pinyin 支持獲取拼音以及拼音的縮寫即首字母 ...

    tulayang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<