亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

cikenerd / 3114人閱讀

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

項目地址:https://github.com/xinglie/pi...

壓縮說明

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

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

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

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

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

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

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

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

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

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

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

當(dāng)然,我們要對3位的高位給一個特殊的字符,這樣我們再還原的時候就很方便還原了,這不是難事,忽略不講

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

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/87973.html

相關(guān)文章

  • 漢字轉(zhuǎn)拼音

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

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

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

    Eastboat 評論0 收藏0
  • 前端周刊第40期

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

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

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

    tulayang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<