分类存档: 未分类 - 第2页

汉字常用字

最近了解一下中国汉字相关的信息,自己做程序这么久了,还一直不知道汉字有多少个。

根据1988年发布的《现代汉语常用字表》,汉字常用字为2500个,次常用字为1000个。根据发布时所做的抽查调研,这常用字及次常用字覆盖率为99.48%。可以说完全满足了需求。

这3500个字的拼音(包含多音)为1183个。看来如果要实现一个语音合成,仅仅需要1183个音频就可以基本满足需求。

我这里收集整理了一下常用字及次常用字的字库及拼音。

一|yī
乙|yǐ
二|èr
十|shí
丁|dīng,zhēng
厂|chǎng,ān,hàn
七|qī
卜|bǔ,bo
人|rén
入|rù
八|bā
九|jiǔ
几|jī,jǐ
儿|ér
了|liǎo,le
力|lì
乃|nǎi
刀|dāo
又|yòu
三|sān
于|yú
干|gān,gàn
亏|kuī
士|shì
工|gōng
土|tǔ
才|cái
寸|cùn
下|xià
大|dà,dài,tài
丈|zhàng
与|yǔ,yù,yú
万|wàn,mò
上|shàng,shǎng
小|xiǎo
口|kǒu
巾|jīn
山|shān
千|qiān
乞|qǐ
川|chuān
亿|yì
个|gè,gě
勺|sháo
久|jiǔ
凡|fán
及|jí
夕|xī
丸|wán
么|yāo,mó,ma,me
广|guǎng,ān
亡|wáng,wú
门|mén
义|yì
之|zhī
尸|shī
弓|gōng
己|jǐ
已|yǐ
子|zǐ
卫|wèi
也|yě
女|nǚ,rǔ
飞|fēi
刃|rèn
习|xí
叉|chā,chá,chǎ
马|mǎ
乡|xiāng
丰|fēng
王|wáng,wàng
井|jǐng
开|kāi
夫|fū,fú
天|tiān
无|wú
元|yuán
专|zhuān
云|yún
扎|zā,zhā,zhá
艺|yì
木|mù
五|wǔ
支|zhī
厅|tīng
不|bù,fǒu
太|tài
犬|quǎn
区|qū,ōu
历|lì
尤|yóu
友|yǒu
匹|pǐ
车|chē,jū
巨|jù
牙|yá
屯|tún,zhūn
比|bǐ
互|hù
切|qiē,qiè
瓦|wǎ,wà
止|zhǐ
少|shǎo,shào
日|rì
中|zhōng,zhòng
冈|gāng
贝|bèi
内|nèi,nà
水|shuǐ
见|jiàn,xiàn
午|wǔ
牛|niú
手|shǒu
毛|máo
气|qì
升|shēng
长|cháng,zhǎng
仁|rén
什|shí,shén
片|piàn,piān
仆|pū,pú
化|huà,huā
仇|chóu,qiú
币|bì
仍|réng
仅|jǐn,jìn
斤|jīn
爪|zhǎo,zhuǎ
反|fǎn
介|jiè
父|fù,fǔ
从|cóng,zòng
今|jīn
凶|xiōng
分|fēn,fèn
乏|fá
公|gōng
仓|cāng
月|yuè
氏|shì,zhī
勿|wù
欠|qiàn
风|fēng,fěng
丹|dān
匀|yún
乌|wū
凤|fèng
勾|gōu,gòu
文|wén
六|liù,lù
方|fāng
火|huǒ
为|wéi,wèi
斗|dǒu,dòu
忆|yì
订|dìng
计|jì
户|hù
认|rèn
心|xīn
尺|chǐ,chě
引|yǐn
丑|chǒu
巴|bā
孔|kǒng
队|duì
办|bàn
以|yǐ
允|yǔn
予|yú,yǔ
劝|quàn
双|shuāng
书|shū
幻|huàn
玉|yù
刊|kān
示|shì
末|mò
未|wèi
击|jī
打|dǎ,dá
巧|qiǎo
正|zhèng,zhēng
扑|pū
扒|bā,pá
功|gōng
扔|rēng
去|qù
甘|gān
世|shì
古|gǔ
节|jié,jiē
本|běn
术|shù,shú,zhú
可|kě,kè
丙|bǐng
左|zuǒ
厉|lì
右|yòu
石|shí,dàn
布|bù
龙|lóng
平|píng
灭|miè
轧|yà
东|dōng
卡|qiǎ,kǎ
北|běi,bèi
占|zhān,zhàn
业|yè
旧|jiù
帅|shuài
归|guī
且|qiě,jū
旦|dàn
目|mù
叶|yè,xié
甲|jiǎ
申|shēn
叮|dīng
电|diàn
号|hào,háo
田|tián
由|yóu
史|shǐ
只|zhī,zhǐ
央|yāng
兄|xiōng
叼|diāo
叫|jiào
另|lìng
叨|tāo,dāo
叹|tàn
四|sì
生|shēng
失|shī
禾|hé
丘|qiū
付|fù
仗|zhàng
代|dài
仙|xiān
们|mén
仪|yí
白|bái
仔|zī,zǐ,zǎi
他|tā
斥|chì
瓜|guā
乎|hū
丛|cóng
令|líng,lǐng,lìng
用|yòng
甩|shuǎi
印|yìn
乐|lè,yuè
句|jù,gōu
匆|cōng
册|cè
犯|fàn
外|wài
处|chǔ,chù
冬|dōng
鸟|niǎo
务|wù
包|bāo
饥|jī
主|zhǔ
市|shì
立|lì
闪|shǎn
兰|lán
半|bàn
汁|zhī
汇|huì
头|tóu,tou
汉|hàn
宁|níng,nìng,zhù
穴|xué
它|tā
讨|tǎo
写|xiě
让|ràng
礼|lǐ
训|xùn
必|bì
议|yì
讯|xùn
记|jì
永|yǒng
司|sī
尼|ní
民|mín
出|chū
辽|liáo
奶|nǎi
奴|nú
加|jiā
召|zhào,shào
皮|pí
边|biān
发|fā,fà
孕|yùn
圣|shèng
对|duì
台|tái,tāi
矛|máo
纠|jiū
母|mǔ
幼|yòu
丝|sī
式|shì
刑|xíng
动|dòng
扛|káng,gāng
寺|sì
吉|jí
扣|kòu
考|kǎo
托|tuō
老|lǎo
执|zhí
巩|gǒng
圾|jī
扩|kuò
扫|sǎo,sào
地|dì,de
扬|yáng
场|cháng,chǎng
耳|ěr
共|gòng,gōng
芒|máng
亚|yà
芝|zhī
朽|xiǔ
朴|pǔ,pò,pō,piáo
机|jī
权|quán
过|guò,guo,guō
臣|chén
再|zài
协|xié
西|xī
压|yā,yà
厌|yàn
在|zài
有|yǒu,yòu
百|bǎi
存|cún
而|ér
页|yè
匠|jiàng
夸|kuā,kuà
夺|duó
灰|huī
达|dá
列|liè
死|sǐ
成|chéng
夹|jiā,jiá,gā,xiá
轨|guǐ
邪|xié,yá,yé,yú,xú
划|huá,huà
迈|mài
毕|bì
至|zhì
此|cǐ
贞|zhēn
师|shī
尘|chén
尖|jiān
劣|liè
光|guāng
当|dāng,dàng
早|zǎo
吐|tǔ,tù
吓|xià,hè
虫|chóng
曲|qū,qǔ
团|tuán
同|tóng,tòng
吊|diào
吃|chī
因|yīn
吸|xī
吗|má,mǎ,ma
屿|yǔ
帆|fān
岁|suì
回|huí
岂|qǐ,kǎi
刚|gāng
则|zé
肉|ròu
网|wǎng
年|nián
朱|zhū,shú
先|xiān
丢|diū
舌|shé
竹|zhú
迁|qiān
乔|qiáo
伟|wěi
传|chuán,zhuàn
乒|pīng
乓|pāng
休|xiū,xǔ
伍|wǔ
伏|fú
优|yōu
伐|fá
延|yán
件|jiàn
任|rèn,rén
伤|shāng
价|jià,jiè,jie
份|fèn,bīn
华|huá,huà,huā
仰|yǎng,áng
仿|fǎng
伙|huǒ
伪|wěi
自|zì
血|xiě,xuè
向|xiàng
似|sì,shì
后|hòu
行|háng,xíng
舟|zhōu
全|quán
会|huì,kuài
杀|shā
合|hé,gě
兆|zhào
企|qǐ
众|zhòng
爷|yé
伞|sǎn
创|chuàng,chuāng
肌|jī
朵|duǒ
杂|zá
危|wēi
旬|xún
旨|zhǐ
负|fù
各|gè,gě
名|míng
多|duō
争|zhēng
色|sè
壮|zhuàng
冲|chōng,chòng
冰|bīng
庄|zhuāng
庆|qìng
亦|yì
刘|liú
齐|qí,jì,zī,zhāi
交|jiāo
次|cì
衣|yī
产|chǎn
决|jué
充|chōng
妄|wàng
闭|bì
问|wèn
闯|chuǎng
羊|yáng,xiáng
并|bìng,bīng
关|guān
米|mǐ
灯|dēng
州|zhōu
汗|hàn,hán
污|wū
江|jiāng
池|chí
汤|tāng,shāng
忙|máng
兴|xīng,xìng
宇|yǔ
守|shǒu
宅|zhái
字|zì
安|ān
讲|jiǎng
军|jūn
许|xǔ,hǔ
论|lùn,lún
农|nóng
讽|fěng
设|shè
访|fǎng
寻|xún
那|nà,nǎ,nèi,nā
迅|xùn
尽|jìn,jǐn
导|dǎo
异|yì
孙|sūn,xùn
阵|zhèn
阳|yáng
收|shōu
阶|jiē
阴|yīn
防|fáng
奸|jiān
如|rú
妇|fù
好|hǎo,hào
她|tā,jiě
妈|mā
戏|xì,hū
羽|yǔ
观|guān,guàn
欢|huān
买|mǎi
红|hóng,gōng
纤|xiān,qiàn
级|jí
约|yuē,yāo
纪|jì,jǐ
驰|chí
巡|xún
寿|shòu
弄|nòng,lòng
麦|mài
形|xíng
进|jìn
戒|jiè
吞|tūn
远|yuǎn,yuàn
违|wéi
运|yùn
扶|fú
抚|fǔ
坛|tán
技|jì
坏|huài,pēi,pī,péi
扰|rǎo
拒|jù
找|zhǎo
批|pī
扯|chě
址|zhǐ
走|zǒu
抄|chāo
坝|bà
贡|gòng
攻|gōng
赤|chì
折|zhē,zhé,shé
抓|zhuā
扮|bàn
抢|qiāng,qiǎng,chēng
孝|xiào
均|jūn
抛|pāo
投|tóu
坟|fén
抗|kàng
坑|kēng
坊|fāng,fáng
抖|dǒu
护|hù
壳|ké,qiào
志|zhì
扭|niǔ
块|kuài
声|shēng
把|bǎ,bà
报|bào
却|què
劫|jié
芽|yá
花|huā
芹|qín
芬|fēn
苍|cāng
芳|fāng
严|yán
芦|lú
劳|láo
克|kè
苏|sū,sù
杆|gān,gǎn
杠|gàng,gāng
杜|dù
材|cái
村|cūn
杏|xìng
极|jí
李|lǐ
杨|yáng
求|qiú
更|gēng,gèng
束|shù
豆|dòu
两|liǎng
丽|lì,lí
医|yī
辰|chén
励|lì
否|fǒu,pǐ
还|huán,hái
歼|jiān
来|lái
连|lián
步|bù
坚|jiān
旱|hàn
盯|dīng
呈|chéng
时|shí
吴|wú
助|zhù,chú
县|xiàn,xuán
里|lǐ
呆|dāi
园|yuán
旷|kuàng
围|wéi
呀|yā,ya
吨|dūn
足|zú
邮|yóu
男|nán
困|kùn
吵|chǎo,chāo
串|chuàn
员|yuán,yún,yùn
听|tīng
吩|fēn
吹|chuī
呜|wū
吧|bā,ba
吼|hǒu
别|bié,biè
岗|gǎng
帐|zhàng
财|cái
针|zhēn
钉|dīng,dìng
告|gào
我|wǒ
乱|luàn
利|lì
秃|tū
秀|xiù
私|sī
每|měi
兵|bīng
估|gū,gù
体|tǐ,tī,bèn
何|hé,hē,hè
但|dàn
伸|shēn
作|zuò
伯|bó,bǎi,bà
伶|líng
佣|yōng,yòng
低|dī
你|nǐ
住|zhù
位|wèi
伴|bàn
身|shēn
皂|zào
佛|fó,fú,bì,bó
近|jìn
彻|chè
役|yì
返|fǎn
余|yú
希|xī
坐|zuò
谷|gǔ
妥|tuǒ
含|hán
邻|lín
岔|chà
肝|gān
肚|dù,dǔ
肠|cháng
龟|guī,jūn,qiū
免|miǎn
狂|kuáng
犹|yóu
角|jiǎo,jué
删|shān
条|tiáo,tiāo
卵|luǎn
岛|dǎo
迎|yíng
饭|fàn
饮|yǐn
系|xì,jì
言|yán
冻|dòng
状|zhuàng
亩|mǔ
况|kuàng
床|chuáng
库|kù
疗|liáo
应|yīng,yìng
冷|lěng
这|zhè,zhèi
序|xù
辛|xīn
弃|qì
冶|yě
忘|wàng
闲|xián
间|jiān,jiàn
闷|mèn,mēn
判|pàn
灶|zào
灿|càn
弟|dì,tì,tuí
汪|wāng
沙|shā,shà
汽|qì
沃|wò
泛|fàn
沟|gōu
没|méi,mò
沈|shěn,chén
沉|chén
怀|huái
忧|yōu
快|kuài
完|wán
宋|sòng
宏|hóng
牢|láo
究|jiū
穷|qióng
灾|zāi
良|liáng
证|zhèng
启|qǐ
评|píng
补|bǔ
初|chū
社|shè
识|shí,zhì
诉|sù
诊|zhěn
词|cí
译|yì
君|jūn
灵|líng
即|jí
层|céng
尿|niào,suī
尾|wěi,yǐ
迟|chí
局|jú
改|gǎi
张|zhāng
忌|jì
际|jì
陆|lù
阿|ā,ē
陈|chén
阻|zǔ
附|fù
妙|miào
妖|yāo
妨|fáng
努|nǔ
忍|rěn
劲|jìn,jìng
鸡|jī
驱|qū
纯|chún
纱|shā
纳|nà
纲|gāng
驳|bó
纵|zòng,zǒng
纷|fēn
纸|zhǐ
纹|wén,wèn
纺|fǎng
驴|lǘ
纽|niǔ
奉|fèng
玩|wán
环|huán
武|wǔ
青|qīng
责|zé
现|xiàn
表|biǎo
规|guī
抹|mǒ,mò,mā
拢|lǒng
拔|bá
拣|jiǎn
担|dān,dàn,dǎn
坦|tǎn
押|yā
抽|chōu
拐|guǎi
拖|tuō
拍|pāi
者|zhě
顶|dǐng
拆|chāi,cā
拥|yōng
抵|dǐ
拘|jū,gōu
势|shì
抱|bào
垃|lā
拉|lā,lá
拦|lán
拌|bàn,pàn
幸|xìng
招|zhāo
坡|pō
披|pī
拨|bō
择|zé,zhái
抬|tái
其|qí,jī
取|qǔ
苦|kǔ
若|ruò,rě
茂|mào
苹|píng,pēng
苗|miáo
英|yīng
范|fàn
直|zhí
茄|qié
茎|jīng
茅|máo
林|lín
枝|zhī,qí
杯|bēi
柜|guì,jǔ
析|xī
板|bǎn
松|sōng
枪|qiāng
构|gòu
杰|jié
述|shù
枕|zhěn
丧|sāng,sàng
或|huò
画|huà
卧|wò
事|shì
刺|cì,cī
枣|zǎo
雨|yǔ,yù
卖|mài
矿|kuàng
码|mǎ
厕|cè
奔|bēn,bèn
奇|qí,jī
奋|fèn
态|tài
欧|ōu
垄|lǒng
妻|qī,qì
轰|hōng
顷|qǐng
转|zhuǎn,zhuàn,zhuǎi
斩|zhǎn
轮|lún
软|ruǎn
到|dào
非|fēi
叔|shū
肯|kěn
齿|chǐ
些|xiē,suò
虎|hǔ
虏|lǔ
肾|shèn
贤|xián
尚|shàng
旺|wàng
具|jù
果|guǒ
味|wèi
昆|kūn
国|guó
昌|chāng
畅|chàng
明|míng
易|yì
昂|áng
典|diǎn
固|gù
忠|zhōng
咐|fù
呼|hū
鸣|míng
咏|yǒng
呢|ní,ne
岸|àn
岩|yán
帖|tiè,tiě,tiē
罗|luó
帜|zhì
岭|lǐng,líng
凯|kǎi
败|bài
贩|fàn
购|gòu
图|tú
钓|diào
制|zhì
知|zhī,zhì
垂|chuí
牧|mù
物|wù
乖|guāi
刮|guā
秆|gǎn
和|hé,hè,huó,huò,hú
季|jì
委|wěi,wēi
佳|jiā
侍|shì
供|gōng,gòng
使|shǐ
例|lì
版|bǎn
侄|zhí
侦|zhēn
侧|cè,zè,zhāi
凭|píng
侨|qiáo
佩|pèi
货|huò
依|yī
的|dí,dì,de
迫|pò,pǎi
质|zhì
欣|xīn
征|zhēng
往|wǎng
爬|pá
彼|bǐ
径|jìng
所|suǒ
舍|shè
金|jīn
命|mìng
斧|fǔ
爸|bà
采|cǎi,cài
受|shòu
乳|rǔ
贪|tān
念|niàn
贫|pín
肤|fū
肺|fèi
肢|zhī
肿|zhǒng
胀|zhàng
朋|péng
股|gǔ
肥|féi
服|fú,fù
胁|xié
周|zhōu
昏|hūn
鱼|yú
兔|tù
狐|hú
忽|hū
狗|gǒu
备|bèi
饰|shì
饱|bǎo
饲|sì
变|biàn
京|jīng
享|xiǎng
店|diàn
夜|yè
庙|miào
府|fǔ
底|dǐ,de
剂|jì
郊|jiāo
废|fèi
净|jìng,chēng
盲|máng
放|fàng
刻|kè
育|yù
闸|zhá
闹|nào
郑|zhèng
券|quàn,xuàn
卷|juàn,juǎn
单|dān,shàn,chán
炒|chǎo
炊|chuī
炕|kàng
炎|yán
炉|lú
沫|mò
浅|qiǎn,jiān
法|fǎ
泄|xiè,yì
河|hé
沾|zhān
泪|lèi
油|yóu
泊|bó,pō
沿|yán
泡|pào,pāo
注|zhù
泻|xiè
泳|yǒng
泥|ní,nì
沸|fèi
波|bō
泼|pō
泽|zé,shì
治|zhì
怖|bù
性|xìng
怕|pà
怜|lián
怪|guài
学|xué
宝|bǎo
宗|zōng
定|dìng
宜|yí
审|shěn
宙|zhòu
官|guān
空|kōng,kòng,kǒng
帘|lián
实|shí
试|shì
郎|láng,làng
诗|shī
肩|jiān
房|fáng
诚|chéng
衬|chèn
衫|shān
视|shì
话|huà
诞|dàn
询|xún
该|gāi
详|xiáng,yáng
建|jiàn
肃|sù
录|lù
隶|lì,dài
居|jū
届|jiè
刷|shuā,shuà
屈|qū
弦|xián
承|chéng
孟|mèng
孤|gū
陕|shǎn
降|jiàng,xiáng
限|xiàn
妹|mèi
姑|gū
姐|jiě
姓|xìng
始|shǐ
驾|jià
参|cān,shēn,cēn,sān
艰|jiān
线|xiàn
练|liàn
组|zǔ
细|xì
驶|shǐ
织|zhī,zhì
终|zhōng
驻|zhù
驼|tuó
绍|shào
经|jīng
贯|guàn
奏|zòu
春|chūn
帮|bāng
珍|zhēn
玻|bō
毒|dú,dài
型|xíng
挂|guà
封|fēng
持|chí
项|xiàng
垮|kuǎ
挎|kuà,kū
城|chéng
挠|náo
政|zhèng
赴|fù
赵|zhào
挡|dǎng,dàng
挺|tǐng
括|kuò,guā
拴|shuān
拾|shí,shè
挑|tiāo,tiǎo
指|zhǐ
垫|diàn
挣|zhèng,zhēng
挤|jǐ
拼|pīn
挖|wā
按|àn
挥|huī
挪|nuó
某|mǒu
甚|shèn,shén
革|gé
荐|jiàn
巷|xiàng,hàng
带|dài
草|cǎo
茧|jiǎn
茶|chá
荒|huāng
茫|máng
荡|dàng
荣|róng
故|gù
胡|hú
南|nán,nā
药|yào
标|biāo
枯|kū
柄|bǐng
栋|dòng
相|xiāng,xiàng
查|chá,zhā
柏|bǎi,bó,bò
柳|liǔ
柱|zhù
柿|shì
栏|lán
树|shù
要|yào,yāo
咸|xián
威|wēi
歪|wāi
研|yán,yàn
砖|zhuān
厘|lí
厚|hòu
砌|qì,qiè
砍|kǎn
面|miàn
耐|nài
耍|shuǎ
牵|qiān
残|cán
殃|yāng
轻|qīng
鸦|yā
皆|jiē
背|bèi,bēi
战|zhàn
点|diǎn
临|lín
览|lǎn
竖|shù
省|shěng,xǐng
削|xiāo,xuē
尝|cháng
是|shì
盼|pàn
眨|zhǎ
哄|hōng,hǒng,hòng
显|xiǎn
哑|yǎ,yā
冒|mào,mò
映|yìng
星|xīng
昨|zuó
畏|wèi
趴|pā
胃|wèi
贵|guì
界|jiè
虹|hóng
虾|xiā
蚁|yǐ
思|sī,sāi
蚂|mǎ,mā,mà
虽|suī
品|pǐn
咽|yān,yàn,yè
骂|mà
哗|huá,huā
咱|zán,zá,zǎ
响|xiǎng
哈|hā,hǎ,hà
咬|yǎo
咳|ké,hāi
哪|nǎ,něi,na,né
炭|tàn
峡|xiá
罚|fá
贱|jiàn
贴|tiē
骨|gǔ,gū
钞|chāo
钟|zhōng
钢|gāng,gàng
钥|yuè,yào
钩|gōu
卸|xiè
缸|gāng
拜|bài
看|kàn,kān
矩|jǔ
怎|zěn
牲|shēng
选|xuǎn
适|shì
秒|miǎo
香|xiāng
种|zhǒng,zhòng,chóng
秋|qiū
科|kē
重|zhòng,chóng
复|fù
竿|gān
段|duàn
便|biàn,pián
俩|liǎng,liǎ
贷|dài
顺|shùn
修|xiū
保|bǎo
促|cù
侮|wǔ
俭|jiǎn
俗|sú
俘|fú
信|xìn,shēn
皇|huáng
泉|quán
鬼|guǐ
侵|qīn
追|zhuī,duī
俊|jùn
盾|dùn
待|dài,dāi
律|lǜ
很|hěn
须|xū
叙|xù
剑|jiàn
逃|táo
食|shí,sì,yì
盆|pén
胆|dǎn
胜|shèng
胞|bāo
胖|pàng,pán,pàn
脉|mài,mò
勉|miǎn
狭|xiá
狮|shī
独|dú
狡|jiǎo
狱|yù
狠|hěn
贸|mào
怨|yuàn
急|jí
饶|ráo
蚀|shí
饺|jiǎo
饼|bǐng
弯|wān
将|jiāng,jiàng
奖|jiǎng
哀|āi
亭|tíng
亮|liàng
度|dù,duó
迹|jì
庭|tíng
疮|chuāng
疯|fēng
疫|yì
疤|bā
姿|zī
亲|qīn,qìng
音|yīn
帝|dì
施|shī
闻|wén
阀|fá
阁|gé
差|chà,chā,chāi,cī
养|yǎng
美|měi
姜|jiāng
叛|pàn
送|sòng
类|lèi
迷|mí
前|qián
首|shǒu
逆|nì
总|zǒng
炼|liàn
炸|zhà,zhá
炮|páo,bāo,pào
烂|làn
剃|tì
洁|jié
洪|hóng
洒|sǎ,xǐ
浇|jiāo
浊|zhuó
洞|dòng
测|cè
洗|xǐ,xiǎn
活|huó
派|pài
洽|qià
染|rǎn
济|jì,jǐ
洋|yáng
洲|zhōu
浑|hún
浓|nóng
津|jīn
恒|héng
恢|huī
恰|qià
恼|nǎo
恨|hèn
举|jǔ
觉|jué,jiào
宣|xuān
室|shì
宫|gōng
宪|xiàn
突|tū
穿|chuān
窃|qiè
客|kè
冠|guān,guàn
语|yǔ,yù
扁|biǎn,piān
袄|ǎo
祖|zǔ
神|shén
祝|zhù
误|wù
诱|yòu
说|shuō,shuì,yuè
诵|sòng
垦|kěn
退|tuì
既|jì
屋|wū
昼|zhòu
费|fèi
陡|dǒu
眉|méi
孩|hái
除|chú
险|xiǎn
院|yuàn
娃|wá
姥|mǔ,lǎo
姨|yí
姻|yīn
娇|jiāo
怒|nù
架|jià
贺|hè
盈|yíng
勇|yǒng
怠|dài
柔|róu
垒|lěi
绑|bǎng
绒|róng
结|jié,jiē
绕|rào
骄|jiāo
绘|huì
给|gěi,jǐ
络|luò,lào
骆|luò
绝|jué
绞|jiǎo
统|tǒng
耕|gēng
耗|hào
艳|yàn
泰|tài
珠|zhū
班|bān
素|sù
蚕|cán
顽|wán
盏|zhǎn
匪|fěi
捞|lāo
栽|zāi
捕|bǔ
振|zhèn
载|zǎi,zài
赶|gǎn
起|qǐ
盐|yán
捎|shāo,shào
捏|niē
埋|mái,mán
捉|zhuō
捆|kǔn
捐|juān
损|sǔn
都|dū,dōu
哲|zhé
逝|shì
捡|jiǎn
换|huàn
挽|wǎn
热|rè
恐|kǒng
壶|hú
挨|āi,ái
耻|chǐ
耽|dān
恭|gōng
莲|lián
莫|mò,mù
荷|hé
获|huò
晋|jìn
恶|è,wù,ě,wū
真|zhēn
框|kuàng
桂|guì
档|dàng
桐|tóng
株|zhū
桥|qiáo
桃|táo
格|gé
校|xiào,jiào
核|hé,hú
样|yàng
根|gēn
索|suǒ
哥|gē
速|sù
逗|dòu
栗|lì
配|pèi
翅|chì
辱|rǔ
唇|chún
夏|xià
础|chǔ
破|pò
原|yuán
套|tào
逐|zhú
烈|liè
殊|shū
顾|gù
轿|jiào
较|jiào
顿|dùn
毙|bì
致|zhì
柴|chái
桌|zhuō
虑|lǜ
监|jiān,jiàn
紧|jǐn
党|dǎng
晒|shài
眠|mián
晓|xiǎo
鸭|yā
晃|huǎng,huàng
晌|shǎng
晕|yùn,yūn
蚊|wén
哨|shào
哭|kū
恩|ēn
唤|huàn
啊|ā,á,ǎ,à,a
唉|āi,ài
罢|bà,ba,pí
峰|fēng
圆|yuán
贼|zéi
贿|huì
钱|qián
钳|qián
钻|zuān,zuàn
铁|tiě
铃|líng
铅|qiān,yán
缺|quē
氧|yǎng
特|tè
牺|xī
造|zào
乘|chéng,shèng
敌|dí
秤|chèng
租|zū
积|jī
秧|yāng
秩|zhì
称|chēng,chèn,chèng
秘|mì,bì
透|tòu
笔|bǐ
笑|xiào
笋|sǔn
债|zhài
借|jiè
值|zhí
倚|yǐ
倾|qīng
倒|dǎo,dào
倘|tǎng,cháng
俱|jù
倡|chàng,chāng
候|hòu
俯|fǔ
倍|bèi
倦|juàn
健|jiàn
臭|chòu,xiù
射|shè,yè,yì
躬|gōng
息|xī
徒|tú
徐|xú
舰|jiàn
舱|cāng
般|bān
航|háng
途|tú
拿|ná
爹|diē
爱|ài
颂|sòng
翁|wēng
脆|cuì
脂|zhī
胸|xiōng
胳|gē,gé
脏|zàng
胶|jiāo
脑|nǎo
狸|lí
狼|láng
逢|féng
留|liú
皱|zhòu
饿|è
恋|liàn
桨|jiǎng
浆|jiāng,jiàng
衰|shuāi
高|gāo
席|xí
准|zhǔn
座|zuò
脊|jǐ
症|zhèng,zhēng
病|bìng
疾|jí
疼|téng
疲|pí
效|xiào
离|lí
唐|táng
资|zī
凉|liáng,liàng
站|zhàn
剖|pōu
竞|jìng
部|bù
旁|páng,bàng
旅|lǚ
畜|xù,chù
阅|yuè
羞|xiū
瓶|píng
拳|quán
粉|fěn
料|liào
益|yì
兼|jiān
烤|kǎo
烘|hōng
烦|fán
烧|shāo
烛|zhú
烟|yān
递|dì
涛|tāo
浙|zhè
涝|lào
酒|jiǔ
涉|shè
消|xiāo
浩|hào
海|hǎi
涂|tú
浴|yù
浮|fú
流|liú
润|rùn
浪|làng
浸|jìn
涨|zhǎng,zhàng
烫|tàng
涌|yǒng,chōng
悟|wù
悄|qiǎo,qiāo
悔|huǐ
悦|yuè
害|hài
宽|kuān
家|jiā,jia
宵|xiāo
宴|yàn
宾|bīn
窄|zhǎi
容|róng
宰|zǎi
案|àn
请|qǐng
朗|lǎng
诸|zhū
读|dú,dòu
扇|shàn,shān
袜|wà
袖|xiù
袍|páo
被|bèi,pī
祥|xiáng
课|kè
谁|shuí
调|tiáo,diào,zhōu
冤|yuān
谅|liàng
谈|tán
谊|yì
剥|bāo,bō
恳|kěn
展|zhǎn
剧|jù
屑|xiè
弱|ruò
陵|líng
陶|táo
陷|xiàn
陪|péi
娱|yú
娘|niáng
通|tōng
能|néng,nài
难|nán,nàn,nuó
预|yù
桑|sāng
绢|juàn
绣|xiù
验|yàn
继|jì
球|qiú
理|lǐ
捧|pěng
堵|dǔ
描|miáo
域|yù
掩|yǎn
捷|jié
排|pái,pǎi
掉|diào
堆|duī
推|tuī
掀|xiān
授|shòu
教|jiào,jiāo
掏|tāo
掠|lüè
培|péi
接|jiē
控|kòng
探|tàn
据|jù,jū
掘|jué
职|zhí
基|jī
著|zhù
勒|lè,lēi
黄|huáng
萌|méng
萝|luó
菌|jūn,jùn
菜|cài
萄|táo
菊|jú
萍|píng
菠|bō
营|yíng
械|xiè
梦|mèng
梢|shāo,sào
梅|méi
检|jiǎn
梳|shū
梯|tī
桶|tǒng
救|jiù
副|fù,pì
票|piào,piāo
戚|qī
爽|shuǎng
聋|lóng
袭|xí
盛|shèng,chéng
雪|xuě
辅|fǔ
辆|liàng
虚|xū
雀|què,qiāo,qiǎo
堂|táng
常|cháng
匙|chí,shi
晨|chén
睁|zhēng
眯|mī,mí
眼|yǎn
悬|xuán
野|yě
啦|lā,la
晚|wǎn
啄|zhuó
距|jù
跃|yuè
略|lüè
蛇|shé,yí
累|léi,lěi,lèi
唱|chàng
患|huàn
唯|wéi
崖|yá
崭|zhǎn,chán
崇|chóng
圈|quān,juàn,juān
铜|tóng
铲|chǎn
银|yín
甜|tián
梨|lí
犁|lí
移|yí
笨|bèn
笼|lóng,lǒng
笛|dí
符|fú
第|dì
敏|mǐn
做|zuò
袋|dài
悠|yōu
偿|cháng
偶|ǒu
偷|tōu
您|nín
售|shòu
停|tíng
偏|piān
假|jiǎ,jià
得|dé,děi,de
衔|xián
盘|pán
船|chuán
斜|xié
盒|hé
鸽|gē
悉|xī
欲|yù
彩|cǎi
领|lǐng
脚|jiǎo
脖|bó
脸|liǎn
脱|tuō
象|xiàng
够|gòu
猜|cāi
猪|zhū
猎|liè
猫|māo,máo
猛|měng
馅|xiàn
馆|guǎn
凑|còu
减|jiǎn
毫|háo
麻|má
痒|yǎng
痕|hén
廊|láng
康|kāng
庸|yōng
鹿|lù
盗|dào
章|zhāng
竟|jìng
商|shāng
族|zú
旋|xuán,xuàn
望|wàng
率|shuài,lǜ
着|zhuó,zháo,zhāo,zhe
盖|gài,gě,hé
粘|zhān
粗|cū
粒|lì
断|duàn
剪|jiǎn
兽|shòu
清|qīng
添|tiān
淋|lín,lìn
淹|yān
渠|qú,jù
渐|jiàn,jiān
混|hùn,hún
渔|yú
淘|táo
液|yè
淡|dàn
深|shēn
婆|pó
梁|liáng
渗|shèn
情|qíng
惜|xī
惭|cán
悼|dào
惧|jù
惕|tì
惊|jīng
惨|cǎn
惯|guàn
寇|kòu
寄|jì
宿|sù,xiǔ,xiù
窑|yáo
密|mì
谋|móu
谎|huǎng
祸|huò
谜|mí
逮|dài
敢|gǎn
屠|tú
弹|dàn,tán
随|suí
蛋|dàn
隆|lóng
隐|yǐn,yìn
婚|hūn
婶|shěn
颈|jǐng,gěng
绩|jì
绪|xù
续|xù
骑|qí
绳|shéng
维|wéi
绵|mián
绸|chóu
绿|lǜ,lù
琴|qín
斑|bān
替|tì
款|kuǎn
堪|kān
搭|dā
塔|tǎ
越|yuè
趁|chèn
趋|qū,cù
超|chāo
提|tí,dī,dǐ
堤|dī
博|bó
揭|jiē,qì
喜|xǐ
插|chā
揪|jiū
搜|sōu
煮|zhǔ
援|yuán
裁|cái
搁|gē,gé
搂|lǒu,lōu
搅|jiǎo
握|wò
揉|róu
斯|sī
期|qī,jī
欺|qī
联|lián
散|sàn,sǎn
惹|rě
葬|zàng
葛|gé
董|dǒng
葡|pú
敬|jìng
葱|cōng
落|là,luò,lào
朝|zhāo,cháo
辜|gū
葵|kuí
棒|bàng
棋|qí
植|zhí
森|sēn
椅|yǐ,yī
椒|jiāo
棵|kē
棍|gùn,hùn
棉|mián
棚|péng
棕|zōng
惠|huì
惑|huò
逼|bī
厨|chú
厦|shà,xià
硬|yìng
确|què
雁|yàn
殖|zhí,shi
裂|liè,liě
雄|xióng
暂|zàn
雅|yǎ
辈|bèi
悲|bēi
紫|zǐ
辉|huī
敞|chǎng
赏|shǎng
掌|zhǎng
晴|qíng
暑|shǔ
最|zuì
量|liáng,liàng
喷|pēn,pèn
晶|jīng
喇|lǎ
遇|yù
喊|hǎn
景|jǐng,yǐng
践|jiàn
跌|diē
跑|pǎo,páo
遗|yí
蛙|wā
蛛|zhū
蜓|tíng
喝|hē,hè,yè
喂|wèi
喘|chuǎn
喉|hóu
幅|fú
帽|mào
赌|dǔ
赔|péi
黑|hēi
铸|zhù
铺|pū,pù
链|liàn
销|xiāo
锁|suǒ
锄|chú
锅|guō
锈|xiù
锋|fēng
锐|ruì
短|duǎn
智|zhì
毯|tǎn
鹅|é
剩|shèng
稍|shāo,shào
程|chéng
稀|xī
税|shuì
筐|kuāng
等|děng
筑|zhù,zhú
策|cè
筛|shāi
筒|tǒng
答|dá,dā
筋|jīn
筝|zhēng
傲|ào
傅|fù
牌|pái
堡|bǎo,bǔ,pù
集|jí
焦|jiāo
傍|bàng
储|chǔ
奥|ào,yù
街|jiē
惩|chéng
御|yù
循|xún
艇|tǐng
舒|shū
番|fān,pān
释|shì
禽|qín
腊|là,xī
脾|pí
腔|qiāng
鲁|lǔ
猾|huá
猴|hóu
然|rán
馋|chán
装|zhuāng
蛮|mán
就|jiù
痛|tòng
童|tóng
阔|kuò
善|shàn
羡|xiàn
普|pǔ
粪|fèn
尊|zūn
道|dào
曾|zēng,céng
焰|yàn
港|gǎng,jiǎng
湖|hú
渣|zhā
湿|shī
温|wēn
渴|kě
滑|huá
湾|wān
渡|dù
游|yóu
滋|zī
溉|gài
愤|fèn
慌|huāng
惰|duò
愧|kuì
愉|yú,tōu
慨|kǎi
割|gē
寒|hán
富|fù
窜|cuàn
窝|wō
窗|chuāng
遍|biàn
裕|yù
裤|kù
裙|qún
谢|xiè
谣|yáo
谦|qiān
属|shǔ,zhǔ
屡|lǚ
强|qiáng,qiǎng,jiàng
粥|zhōu,yù
疏|shū
隔|gé
隙|xì
絮|xù
嫂|sǎo
登|dēng
缎|duàn
缓|huǎn
编|biān
骗|piàn
缘|yuán
瑞|ruì
魂|hún
肆|sì
摄|shè,niè
摸|mō
填|tián,zhèn
搏|bó
塌|tā
鼓|gǔ
摆|bǎi
携|xié
搬|bān
摇|yáo
搞|gǎo
塘|táng
摊|tān
蒜|suàn
勤|qín
鹊|què
蓝|lán
墓|mù
幕|mù
蓬|péng
蓄|xù
蒙|mēng,méng,měng
蒸|zhēng
献|xiàn
禁|jīn,jìn
楚|chǔ
想|xiǎng
槐|huái
榆|yú
楼|lóu
概|gài
赖|lài
酬|chóu
感|gǎn
碍|ài
碑|bēi
碎|suì
碰|pèng
碗|wǎn
碌|lù,liù
雷|léi
零|líng
雾|wù
雹|báo
输|shū
督|dū
龄|líng
鉴|jiàn
睛|jīng
睡|shuì
睬|cǎi
鄙|bǐ
愚|yú
暖|nuǎn
盟|méng
歇|xiē
暗|àn
照|zhào
跨|kuà
跳|tiào,táo
跪|guì
路|lù
跟|gēn
遣|qiǎn
蛾|é,yǐ
蜂|fēng
嗓|sǎng
置|zhì
罪|zuì
罩|zhào
错|cuò
锡|xī
锣|luó
锤|chuí
锦|jǐn
键|jiàn
锯|jù
矮|ǎi
辞|cí
稠|chóu
愁|chóu
筹|chóu
签|qiān
简|jiǎn
毁|huǐ
舅|jiù
鼠|shǔ
催|cuī
傻|shǎ
像|xiàng
躲|duǒ
微|wēi
愈|yù
遥|yáo
腰|yāo
腥|xīng
腹|fù
腾|téng
腿|tuǐ
触|chù
解|jiě,jiè,xiè
酱|jiàng
痰|tán
廉|lián
新|xīn
韵|yùn
意|yì
粮|liáng
数|shù,shǔ,shuò
煎|jiān
塑|sù
慈|cí
煤|méi
煌|huáng
满|mǎn
漠|mò
源|yuán
滤|lǜ
滥|làn
滔|tāo
溪|xī
溜|liū,liù
滚|gǔn
滨|bīn
粱|liáng
滩|tān
慎|shèn
誉|yù
塞|sāi,sài,sè
谨|jǐn
福|fú
群|qún
殿|diàn
辟|bì,pì
障|zhàng
嫌|xián
嫁|jià
叠|dié
缝|féng,fèng
缠|chán
静|jìng
碧|bì
璃|lí
墙|qiáng
撇|piē,piě
嘉|jiā
摧|cuī
截|jié
誓|shì
境|jìng
摘|zhāi
摔|shuāi
聚|jù
蔽|bì
慕|mù
暮|mù
蔑|miè
模|mó,mú
榴|liú
榜|bǎng,bàng
榨|zhà
歌|gē
遭|zāo
酷|kù
酿|niàng
酸|suān
磁|cí
愿|yuàn
需|xū
弊|bì
裳|cháng,shang
颗|kē
嗽|sòu
蜻|qīng
蜡|là
蝇|yíng
蜘|zhī
赚|zhuàn
锹|qiāo
锻|duàn
舞|wǔ
稳|wěn
算|suàn
箩|luó
管|guǎn
僚|liáo
鼻|bí
魄|pò
貌|mào
膜|mó
膊|bó
膀|bǎng
鲜|xiān,xiǎn
疑|yí,nǐ
馒|mán
裹|guǒ
敲|qiāo
豪|háo
膏|gāo,gào
遮|zhē
腐|fǔ
瘦|shòu
辣|là
竭|jié
端|duān
旗|qí
精|jīng
歉|qiàn
熄|xī
熔|róng
漆|qī
漂|piāo,piǎo,piào
漫|màn
滴|dī
演|yǎn
漏|lòu
慢|màn
寨|zhài
赛|sài
察|chá
蜜|mì
谱|pǔ
嫩|nèn
翠|cuì
熊|xióng
凳|dèng
骡|luó
缩|suō,sù
慧|huì
撕|sī
撒|sā,sǎ
趣|qù,cù
趟|tàng,tāng
撑|chēng
播|bō
撞|zhuàng
撤|chè
增|zēng
聪|cōng
鞋|xié
蕉|jiāo
蔬|shū
横|héng,hèng
槽|cáo
樱|yīng
橡|xiàng
飘|piāo
醋|cù
醉|zuì
震|zhèn
霉|méi
瞒|mán,mén
题|tí
暴|bào,pù
瞎|xiā
影|yǐng
踢|tī
踏|tà
踩|cǎi
踪|zōng
蝶|dié
蝴|hú
嘱|zhǔ
墨|mò
镇|zhèn
靠|kào
稻|dào
黎|lí
稿|gǎo
稼|jià
箱|xiāng
箭|jiàn
篇|piān
僵|jiāng
躺|tǎng
僻|pì
德|dé
艘|sōu
膝|xī
膛|táng
熟|shú
摩|mó,mā
颜|yán
毅|yì
糊|hū,hú,hù
遵|zūn
潜|qián
潮|cháo
懂|dǒng
额|é
慰|wèi
劈|pī,pǐ
操|cāo
燕|yàn,yān
薯|shǔ
薪|xīn
薄|báo,bó,bò
颠|diān
橘|jú
整|zhěng
融|róng
醒|xǐng
餐|cān
嘴|zuǐ
蹄|tí
器|qì
赠|zèng
默|mò
镜|jìng
赞|zàn
篮|lán
邀|yāo
衡|héng
膨|péng
雕|diāo
磨|mó,mò
凝|níng
辨|biàn
辩|biàn
糖|táng
糕|gāo
燃|rán
澡|zǎo
激|jī
懒|lǎn
壁|bì
避|bì
缴|jiǎo,zhuó
戴|dài
擦|cā
鞠|jū
藏|cáng,zàng
霜|shuāng
霞|xiá
瞧|qiáo
蹈|dǎo
螺|luó
穗|suì
繁|fán,pó
辫|biàn
赢|yíng
糟|zāo
糠|kāng
燥|zào
臂|bì,bei
翼|yì
骤|zhòu
鞭|biān
覆|fù
蹦|bèng
镰|lián
翻|fān
鹰|yīng
警|jǐng
攀|pān
蹲|dūn
颤|chàn,zhàn
瓣|bàn
爆|bào
疆|jiāng,qiáng
壤|rǎng
耀|yào
躁|zào
嚼|jiáo,jué,jiào
嚷|rǎng,rāng
籍|jí
魔|mó
灌|guàn
蠢|chǔn
霸|bà
露|lòu,lù
囊|náng,nāng
罐|guàn

匕|bǐ
刁|diāo
丐|gài
歹|dǎi
戈|gē
夭|yāo
仑|lún
讥|jī
冗|rǒng
邓|dèng
艾|ài
夯|hāng,bèn
凸|tū
卢|lú
叭|bā
叽|jī
皿|mǐn
凹|āo,wā
囚|qiú
矢|shǐ
乍|zhà
尔|ěr
冯|féng,píng
玄|xuán
邦|bāng
迂|yū
邢|xíng
芋|yù
芍|sháo
吏|lì
夷|yí
吁|xū,yù
吕|lǚ
吆|yāo
屹|yì
廷|tíng
迄|qì
臼|jiù
仲|zhòng
伦|lún
伊|yī
肋|lèi,lē
旭|xù
匈|xiōng
凫|fú
妆|zhuāng
亥|hài
汛|xùn
讳|huì
讶|yà
讹|é
讼|sòng
诀|jué
弛|chí
阱|jǐng
驮|tuó
驯|xùn
纫|rèn
玖|jiǔ
玛|mǎ
韧|rèn
抠|kōu
扼|è
汞|gǒng
扳|bān
抡|lūn,lún
坎|kǎn
坞|wù
抑|yì
拟|nǐ
抒|shū
芙|fú
芜|wú
苇|wěi
芥|jiè,gài
芯|xīn,xìn
芭|bā
杖|zhàng
杉|shān,shā
巫|wū
杈|chā,chà
甫|fǔ
匣|xiá
轩|xuān
卤|lǔ
肖|xiāo,xiào
吱|zhī,zī
吠|fèi
呕|ǒu,ōu,òu
呐|nà,nè
吟|yín
呛|qiāng,qiàng
吻|wěn
吭|háng,kēng
邑|yì
囤|dùn,tún
吮|shǔn
岖|qū
牡|mǔ
佑|yòu
佃|diàn,tián
伺|sì,cì
囱|cōng
肛|gāng
肘|zhǒu
甸|diàn,tián,shèng
狈|bèi
鸠|jiū
彤|tóng
灸|jiǔ
刨|páo,bào
庇|bì
吝|lìn
庐|lú
闰|rùn
兑|duì,ruì,yuè
灼|zhuó
沐|mù
沛|pèi
汰|tài
沥|lì
沦|lún
汹|xiōng
沧|cāng
沪|hù
忱|chén
诅|zǔ
诈|zhà
罕|hǎn
屁|pì
坠|zhuì
妓|jì
姊|zǐ
妒|dù
纬|wěi
玫|méi
卦|guà
坷|kē,kě
坯|pī
拓|tuò,tà,zhí
坪|píng
坤|kūn
拄|zhǔ
拧|níng,nǐng,nìng
拂|fú,bì
拙|zhuō
拇|mǔ
拗|ǎo,ào,niù
茉|mò
昔|xī
苛|kē,hē
苫|shān,shàn
苟|gǒu
苞|bāo
茁|zhuó
苔|tái,tāi
枉|wǎng
枢|shū
枚|méi
枫|fēng
杭|háng
郁|yù
矾|fán
奈|nài
奄|yǎn,yān
殴|ōu
歧|qí
卓|zhuó
昙|tán
哎|āi
咕|gū
呵|hē,a,kē
咙|lóng
呻|shēn
咒|zhòu
咆|páo
咖|kā,gā
帕|pà
账|zhàng
贬|biǎn
贮|zhù
氛|fēn
秉|bǐng
岳|yuè
侠|xiá
侥|jiǎo,yáo
侣|lǚ
侈|chǐ
卑|bēi
刽|guì
刹|chà,shā
肴|yáo
觅|mì
忿|fèn
瓮|wèng
肮|āng
肪|fáng
狞|níng
庞|páng
疟|nüè,yào
疙|gē,yì
疚|jiù
卒|zú,cù
氓|méng,máng
炬|jù
沽|gū
沮|jǔ,jù
泣|qì
泞|nìng
泌|mì,bì
沼|zhǎo
怔|zhēng
怯|qiè
宠|chǒng
宛|wǎn,yuān
衩|chà
祈|qí
诡|guǐ
帚|zhǒu
屉|tì
弧|hú
弥|mí,mǐ
陋|lòu
陌|mò
函|hán
姆|mǔ
虱|shī
叁|sān
绅|shēn
驹|jū
绊|bàn
绎|yì
契|qì,qiè,xiè
贰|èr
玷|diàn
玲|líng
珊|shān
拭|shì
拷|kǎo
拱|gǒng
挟|xié,jiā
垢|gòu
垛|duǒ,duò
拯|zhěng
荆|jīng
茸|róng
茬|chá
荚|jiá
茵|yīn
茴|huí
荞|qiáo
荠|jì
荤|hūn
荧|yíng
荔|lì
栈|zhàn
柑|gān
栅|zhà,shān,shi,cè
柠|níng
枷|jiā
勃|bó,bèi
柬|jiǎn
砂|shā
泵|bèng
砚|yàn
鸥|ōu
轴|zhóu
韭|jiǔ
虐|nüè
昧|mèi
盹|dǔn
咧|liě,liē,lié,lie
昵|nì
昭|zhāo
盅|zhōng
勋|xūn
哆|duō
咪|mī
哟|yō,yo
幽|yōu
钙|gài
钝|dùn
钠|nà
钦|qīn
钧|jūn
钮|niǔ
毡|zhān
氢|qīng
秕|bǐ
俏|qiào,xiào
俄|é
俐|lì
侯|hóu,hòu
徊|huái
衍|yǎn
胚|pēi
胧|lóng
胎|tāi
狰|zhēng
饵|ěr
峦|luán
奕|yì
咨|zī
飒|sà
闺|guī
闽|mǐn
籽|zǐ
娄|lóu
烁|shuò
炫|xuàn
洼|wā
柒|qī
涎|xián
洛|luò
恃|shì
恍|huǎng
恬|tián
恤|xù
宦|huàn
诫|jiè
诬|wū
祠|cí
诲|huì
屏|píng,bǐng
屎|shǐ
逊|xùn
陨|yǔn
姚|yáo
娜|nà,nuó
蚤|zǎo
骇|hài
耘|yún
耙|bà,pá
秦|qín
匿|nì
埂|gěng
捂|wǔ
捍|hàn
袁|yuán
捌|bā
挫|cuò
挚|zhì
捣|dǎo
捅|tǒng
埃|āi
耿|gěng
聂|niè
荸|bí
莽|mǎng
莱|lái
莉|lì
莹|yíng
莺|yīng
梆|bāng
栖|qī,xī
桦|huà
栓|shuān
桅|wéi
桩|zhuāng
贾|gǔ,jiǎ
酌|zhuó
砸|zá
砰|pēng
砾|lì
殉|xùn
逞|chěng
哮|xiào
唠|lào,láo
哺|bǔ
剔|tī
蚌|bàng,bèng
蚜|yá
畔|pàn
蚣|gōng,zhōng
蚪|dǒu
蚓|yǐn
哩|li,lǐ,lī
圃|pǔ
鸯|yāng
唁|yàn
哼|hēng,heng
唆|suō
峭|qiào
唧|jī
峻|jùn
赂|lù
赃|zāng
钾|jiǎ
铆|mǎo
氨|ān
秫|shú
笆|bā
俺|ǎn
赁|lìn
倔|jué,juè
殷|yīn,yān,yǐn
耸|sǒng
舀|yǎo
豺|chái
豹|bào
颁|bān
胯|kuà
胰|yí
脐|qí
脓|nóng
逛|guàng
卿|qīng
鸵|tuó
鸳|yuān
馁|něi
凌|líng
凄|qī
衷|zhōng
郭|guō
斋|zhāi
疹|zhěn
紊|wěn
瓷|cí
羔|gāo
烙|lào,luò
浦|pǔ
涡|wō,guō
涣|huàn
涤|dí
涧|jiàn
涕|tì
涩|sè
悍|hàn
悯|mǐn
窍|qiào
诺|nuò
诽|fěi
袒|tǎn
谆|zhūn
祟|suì
恕|shù
娩|miǎn
骏|jùn
琐|suǒ
麸|fū
琉|liú
琅|láng
措|cuò
捺|nà
捶|chuí
赦|shè
埠|bù
捻|niǎn,niē
掐|qiā
掂|diān
掖|yè,yē
掷|zhì
掸|dǎn,shàn
掺|chān,xiān,càn,shǎn
勘|kān
聊|liáo
娶|qǔ
菱|líng
菲|fēi,fěi
萎|wěi
菩|pú
萤|yíng
乾|qián,gān
萧|xiāo
萨|sà
菇|gū
彬|bīn
梗|gěng
梧|wú
梭|suō
曹|cáo
酝|yùn
酗|xù
厢|xiāng
硅|guī
硕|shuò,shí
奢|shē
盔|kuī
匾|biǎn
颅|lú
彪|biāo
眶|kuàng
晤|wù
曼|màn
晦|huì
冕|miǎn
啡|fēi
畦|qí
趾|zhǐ
啃|kěn
蛆|qū
蚯|qiū
蛉|líng
蛀|zhù
唬|hǔ,xià
啰|luō,luó,luo
唾|tuò
啤|pí
啥|shá
啸|xiào
崎|qí
逻|luó
崔|cuī
崩|bēng
婴|yīng
赊|shē
铐|kào
铛|dāng,chēng
铝|lǚ
铡|zhá
铣|xiǎn,xǐ
铭|míng
矫|jiǎo,jiáo
秸|jiē
秽|huì
笙|shēng
笤|tiáo
偎|wēi
傀|kuǐ,guī
躯|qū
兜|dōu
衅|xìn
徘|pái
徙|xǐ
舶|bó
舷|xián
舵|duò
敛|liǎn
翎|líng
脯|fǔ
逸|yì
凰|huáng
猖|chāng
祭|jì,zhài
烹|pēng
庶|shù
庵|ān
痊|quán
阎|yán
阐|chǎn
眷|juàn
焊|hàn
焕|huàn
鸿|hóng
涯|yá
淑|shū
淌|tǎng,chǎng
淮|huái
淆|xiáo
渊|yuān
淫|yín
淳|chún,zhūn
淤|yū
淀|diàn
涮|shuàn
涵|hán
惦|diàn
悴|cuì
惋|wǎn
寂|jì
窒|zhì
谍|dié
谐|xié
裆|dāng
袱|fú
祷|dǎo
谒|yè
谓|wèi
谚|yàn
尉|wèi,yù
堕|duò,huī
隅|yú
婉|wǎn
颇|pō
绰|chuò,chāo
绷|bēng,běng,bèng
综|zōng,zèng
绽|zhàn
缀|zhuì
巢|cháo
琳|lín
琢|zhuó,zuó
琼|qióng
揍|zòu
堰|yàn
揩|kāi
揽|lǎn
揖|yī
彭|péng,bāng
揣|chuǎi,chuài,chuāi,tuán,zhuī
搀|chān
搓|cuō
壹|yī
搔|sāo
葫|hú
募|mù
蒋|jiǎng
蒂|dì
韩|hán
棱|léng,lēng,líng
椰|yē
焚|fén
椎|zhuī,chuí
棺|guān
榔|láng
椭|tuǒ
粟|sù
棘|jí
酣|hān
酥|sū
硝|xiāo
硫|liú
颊|jiá
雳|lì
翘|qiáo,qiào
凿|záo
棠|táng
晰|xī
鼎|dǐng
喳|zhā,chā
遏|è
晾|liàng
畴|chóu
跋|bá
跛|bǒ
蛔|huí
蜒|yán
蛤|gé,há
鹃|juān
喻|yù
啼|tí
喧|xuān
嵌|qiàn,kàn
赋|fù
赎|shú
赐|cì
锉|cuò
锌|xīn
甥|shēng
掰|bāi
氮|dàn
氯|lǜ
黍|shǔ
筏|fá
牍|dú
粤|yuè
逾|yú
腌|yān
腋|yè
腕|wàn
猩|xīng
猬|wèi
惫|bèi
敦|dūn,duì
痘|dòu
痢|lì
痪|huàn
竣|jùn
翔|xiáng
奠|diàn
遂|suì
焙|bèi
滞|zhì
湘|xiāng
渤|bó
渺|miǎo
溃|kuì,huì
溅|jiàn,jiān
湃|pài
愕|è
惶|huáng
寓|yù
窖|jiào
窘|jiǒng
雇|gù
谤|bàng
犀|xī
隘|ài
媒|méi
媚|mèi
婿|xù
缅|miǎn
缆|lǎn
缔|dì
缕|lǚ
骚|sāo,sǎo
瑟|sè
鹉|wǔ
瑰|guī
搪|táng
聘|pìn
斟|zhēn
靴|xuē
靶|bǎ
蓖|bì
蒿|hāo
蒲|pú
蓉|róng
楔|xiē
椿|chūn
楷|kǎi,jiē
榄|lǎn
楞|léng
楣|méi
酪|lào
碘|diǎn
硼|péng
碉|diāo
辐|fú
辑|jí
频|pín,bīn
睹|dǔ
睦|mù
瞄|miáo
嗜|shì
嗦|suō
暇|xiá
畸|jī
跷|qiāo
跺|duò
蜈|wú
蜗|wō
蜕|tuì
蛹|yǒng
嗅|xiù
嗡|wēng
嗤|chī
署|shǔ
蜀|shǔ
幌|huǎng
锚|máo
锥|zhuī
锨|xiān
锭|dìng
锰|měng
稚|zhì
颓|tuí
筷|kuài
魁|kuí
衙|yá
腻|nì
腮|sāi
腺|xiàn
鹏|péng
肄|yì
猿|yuán
颖|yǐng
煞|shā,shà
雏|chú
馍|mó
馏|liù,liú
禀|bǐng
痹|bì
廓|kuò
痴|chī
靖|jìng
誊|téng
漓|lí
溢|yì
溯|sù
溶|róng
滓|zǐ
溺|nì,niào
寞|mò
窥|kuī
窟|kū
寝|qǐn
褂|guà
裸|luǒ
谬|miù
媳|xí
嫉|jí
缚|fù
缤|bīn
剿|jiǎo,chāo
赘|zhuì
熬|āo,áo
赫|hè
蔫|niān
摹|mó
蔓|màn,wàn
蔗|zhè
蔼|ǎi
熙|xī
蔚|wèi
兢|jīng
榛|zhēn
榕|róng
酵|jiào
碟|dié
碴|chá,chā
碱|jiǎn
碳|tàn
辕|yuán
辖|xiá
雌|cí
墅|shù
嘁|qī
踊|yǒng
蝉|chán
嘀|dí
幔|màn
镀|dù
舔|tiǎn
熏|xūn,xùn
箍|gū
箕|jī
箫|xiāo
舆|yú
僧|sēng
孵|fū
瘩|dá,da
瘟|wēn
彰|zhāng
粹|cuì
漱|shù
漩|xuán
漾|yàng
慷|kāng
寡|guǎ
寥|liáo
谭|tán
褐|hè
褪|tuì,tùn
隧|suì
嫡|dí
缨|yīng
撵|niǎn
撩|liāo,liáo
撮|cuō,zuǒ
撬|qiào
擒|qín
墩|dūn
撰|zhuàn
鞍|ān
蕊|ruǐ
蕴|yùn
樊|fán
樟|zhāng
橄|gǎn
敷|fū
豌|wān
醇|chún
磕|kē
磅|bàng,páng
碾|niǎn
憋|biē
嘶|sī
嘲|cháo,zhāo
嘹|liáo
蝠|fú
蝎|xiē
蝌|kē
蝗|huáng
蝙|biān
嘿|hēi,mò
幢|chuáng,zhuàng
镊|niè
镐|gǎo
稽|jī,qǐ
篓|lǒu
膘|biāo
鲤|lǐ
鲫|jì
褒|bāo
瘪|biē,biě
瘤|liú
瘫|tān
凛|lǐn
澎|péng
潭|tán
潦|lǎo,lào,liáo
澳|ào
潘|pān
澈|chè
澜|lán
澄|chéng,dèng
憔|qiáo
懊|ào
憎|zēng
翩|piān
褥|rù
谴|qiǎn
鹤|hè
憨|hān
履|lǚ
嬉|xī
豫|yù
缭|liáo
撼|hàn
擂|léi,lèi
擅|shàn
蕾|lěi
薛|xuē
薇|wēi
擎|qíng
翰|hàn
噩|è
橱|chú
橙|chéng
瓢|piáo
蟥|huáng
霍|huò
霎|shà
辙|zhé
冀|jì
踱|duó
蹂|róu
蟆|má,mò
螃|páng
螟|míng
噪|zào
鹦|yīng
黔|qián
穆|mù
篡|cuàn
篷|péng
篙|gāo
篱|lí
儒|rú
膳|shàn
鲸|jīng
瘾|yǐn
瘸|qué
糙|cāo
燎|liáo,liǎo
濒|bīn
憾|hàn
懈|xiè
窿|lóng
缰|jiāng
壕|háo
藐|miǎo
檬|méng
檐|yán
檩|lǐn
檀|tán
礁|jiāo
磷|lín
瞭|liǎo,liào
瞬|shùn
瞳|tóng
瞪|dèng
曙|shǔ
蹋|tà
蟋|xī
蟀|shuài
嚎|háo
赡|shàn
镣|liào
魏|wèi
簇|cù
儡|lěi
徽|huī
爵|jué
朦|méng
臊|sāo,sào
鳄|è
糜|mí,méi
癌|ái
懦|nuò
豁|huō,huò,huá
臀|tún
藕|ǒu
藤|téng
瞻|zhān
嚣|xiāo
鳍|qí
癞|lài
瀑|pù,bào
襟|jīn
璧|bì
戳|chuō
攒|zǎn,cuán
孽|niè
蘑|mó
藻|zǎo
鳖|biē
蹭|cèng
蹬|dēng
簸|bò,bǒ
簿|bù,bó
蟹|xiè
靡|mí
癣|xuǎn
羹|gēng
鬓|bìn
攘|rǎng
蠕|rú
巍|wēi
鳞|lín
糯|nuò
譬|pì
霹|pī
躏|lìn
髓|suǐ
蘸|zhàn
镶|xiāng
瓤|ráng
矗|chù

a
á
à
ǎ
ā
ái
ài
ǎi
āi
àn
ǎn
ān
áng
āng
áo
ào
ǎo
āo
ba




bái
bài
bǎi
bāi
bàn
bǎn
bān
bàng
bǎng
bāng
báo
bào
bǎo
bāo
bei
bèi
běi
bēi
bèn
běn
bēn
bèng
běng
bēng




biàn
biǎn
biān
biǎo
biāo
bié
biè
biě
biē
bìn
bīn
bìng
bǐng
bīng
bo







cái
cài
cǎi
cāi
cán
càn
cǎn
cān
cáng
cāng
cáo
cǎo
cāo

cēn
céng
cèng
chá
chà
chǎ
chā
chái
chāi
chán
chàn
chǎn
chān
cháng
chàng
chǎng
chāng
cháo
chǎo
chāo
chè
chě
chē
chén
chèn
chéng
chèng
chěng
chēng
chí
chì
chǐ
chī
chóng
chòng
chǒng
chōng
chóu
chòu
chǒu
chōu
chú
chù
chǔ
chū
chuài
chuǎi
chuāi
chuán
chuàn
chuǎn
chuān
chuáng
chuàng
chuǎng
chuāng
chuí
chuī
chún
chǔn
chūn
chuò
chuō




cóng
cōng
còu


cuán
cuàn
cuì
cuī
cún
cùn
cūn
cuò
cuō
da




dài
dǎi
dāi
dàn
dǎn
dān
dàng
dǎng
dāng
dào
dǎo
dāo
de

děi
dèng
děng
dēng




diàn
diǎn
diān
diào
diāo
dié
diē
dìng
dǐng
dīng
diū
dòng
dǒng
dōng
dòu
dǒu
dōu




duàn
duǎn
duān
duì
duī
dùn
dǔn
dūn
duó
duò
duǒ
duō
é
è
ě
ē
ēn
ér
èr
ěr




fán
fàn
fǎn
fān
fáng
fàng
fǎng
fāng
féi
fèi
fěi
fēi
fén
fèn
fěn
fēn
féng
fèng
fěng
fēng

fǒu





gài
gǎi
gāi
gàn
gǎn
gān
gàng
gǎng
gāng
gào
gǎo
gāo




gěi
gēn
gèng
gěng
gēng
gòng
gǒng
gōng
gòu
gǒu
gōu



guà
guǎ
guā
guài
guǎi
guāi
guàn
guǎn
guān
guàng
guǎng
guāng
guì
guǐ
guī
gùn
gǔn
guo
guó
guò
guǒ
guō




hái
hài
hǎi
hāi
hán
hàn
hǎn
hān
háng
hàng
hāng
háo
hào
hǎo
hāo



hēi
hén
hèn
hěn
héng
hèng
hēng
heng
hóng
hòng
hǒng
hōng
hóu
hòu
hǒu




huá
huà
huā
huái
huài
huán
huàn
huǎn
huān
huáng
huàng
huǎng
huāng
huí
huì
huǐ
huī
hún
hùn
hūn
huó
huò
huǒ
huō




jia
jiá
jià
jiǎ
jiā
jiàn
jiǎn
jiān
jiàng
jiǎng
jiāng
jiáo
jiào
jiǎo
jiāo
jie
jié
jiè
jiě
jiē
jìn
jǐn
jīn
jìng
jǐng
jīng
jiǒng
jiù
jiǔ
jiū




juàn
juǎn
juān
jué
juè
jùn
jūn


kǎi
kāi
kàn
kǎn
kān
káng
kàng
kāng
kào
kǎo




kěn
kēng
kòng
kǒng
kōng
kòu
kǒu
kōu



kuà
kuǎ
kuā
kuài
kuǎn
kuān
kuáng
kuàng
kuāng
kuí
kuì
kuǐ
kuī
kùn
kǔn
kūn
kuò
la




lái
lài
lán
làn
lǎn
láng
làng
lǎng
láo
lào
lǎo
lāo
le


léi
lèi
lěi
lēi
léng
lěng
lēng
li




liǎ
lián
liàn
liǎn
liáng
liàng
liǎng
liáo
liào
liǎo
liāo
lie
lié
liè
liě
liē
lín
lìn
lǐn
líng
lìng
lǐng
liú
liù
liǔ
liū
lóng
lòng
lǒng
lóu
lòu
lǒu
lōu






luán
luàn
luǎn
lüè
lún
lùn
lūn
luo
luó
luò
luǒ
luō
ma




mái
mài
mǎi
mán
màn
mǎn
máng
mǎng
máo
mào
mǎo
māo
me
méi
mèi
měi
mén
mèn
mēn
méng
mèng
měng
mēng




mián
miàn
miǎn
miáo
miào
miǎo
miè
mín
mǐn
míng
mìng
miù




móu
mǒu



na




nài
nǎi
nán
nàn
náng
nāng
náo
nào
nǎo
ne


nèi
něi
nèn
néng



nián
niàn
niǎn
niān
niáng
niàng
niào
niǎo
niè
niē
nín
níng
nìng
nǐng
niú
niù
niǔ
nóng
nòng




nuǎn
nüè
nuó
nuò
òu
ǒu
ōu



pái
pài
pǎi
pāi
pán
pàn
pān
páng
pàng
pāng
páo
pào
pǎo
pāo
péi
pèi
pēi
pén
pèn
pēn
péng
pèng
pěng
pēng




pián
piàn
piān
piáo
piào
piǎo
piāo
piě
piē
pín
pìn
pǐn
pīn
píng
pīng



pōu








qià
qiǎ
qiā
qián
qiàn
qiǎn
qiān
qiáng
qiàng
qiǎng
qiāng
qiáo
qiào
qiǎo
qiāo
qié
qiè
qiě
qiē
qín
qǐn
qīn
qíng
qìng
qǐng
qīng
qióng
qiú
qiū




quán
quàn
quǎn
quān
qué
què
quē
qún
rán
rǎn
ráng
ràng
rǎng
rāng
ráo
rào
rǎo


rén
rèn
rěn
réng
rēng

róng
rǒng
róu
ròu



ruǎn
ruì
ruǐ
rùn
ruò



sài
sāi
sàn
sǎn
sān
sàng
sǎng
sāng
sào
sǎo
sāo

sēn
sēng
shá
shà
shǎ
shā
shài
shāi
shàn
shǎn
shān
shang
shàng
shǎng
shāng
sháo
shào
shǎo
shāo
shé
shè
shē
shén
shèn
shěn
shēn
shéng
shèng
shěng
shēng
shi
shí
shì
shǐ
shī
shòu
shǒu
shōu
shú
shù
shǔ
shū
shuà
shuǎ
shuā
shuài
shuǎi
shuāi
shuàn
shuān
shuǎng
shuāng
shuí
shuì
shuǐ
shùn
shǔn
shuò
shuō



sòng
sǒng
sōng
sòu
sōu



suàn
suān
suí
suì
suǐ
suī
sǔn
sūn
suò
suǒ
suō



tái
tài
tāi
tán
tàn
tǎn
tān
táng
tàng
tǎng
tāng
táo
tào
tǎo
tāo

téng




tián
tiǎn
tiān
tiáo
tiào
tiǎo
tiāo
tiè
tiě
tiē
tíng
tǐng
tīng
tóng
tòng
tǒng
tōng
tou
tóu
tòu
tōu




tuán
tuí
tuì
tuǐ
tuī
tún
tùn
tūn
tuó
tuò
tuǒ
tuō




wài
wāi
wán
wàn
wǎn
wān
wáng
wàng
wǎng
wāng
wéi
wèi
wěi
wēi
wén
wèn
wěn
wēn
wèng
wēng











xiá
xià
xiā
xián
xiàn
xiǎn
xiān
xiáng
xiàng
xiǎng
xiāng
xiáo
xiào
xiǎo
xiāo
xié
xiè
xiě
xiē
xìn
xīn
xíng
xìng
xǐng
xīng
xióng
xiōng
xiù
xiǔ
xiū




xuán
xuàn
xuǎn
xuān
xué
xuè
xuě
xuē
xún
xùn
xūn
ya




yán
yàn
yǎn
yān
yáng
yàng
yǎng
yāng
yáo
yào
yǎo
yāo








yín
yìn
yǐn
yīn
yíng
yìng
yǐng
yīng
yo

yòng
yǒng
yōng
yóu
yòu
yǒu
yōu




yuán
yuàn
yuǎn
yuān
yuè
yuē
yún
yùn
yǔn
yūn



zài
zǎi
zāi
zán
zàn
zǎn
zàng
zāng
záo
zào
zǎo
zāo


zéi
zěn
zèng
zēng
zhá
zhà
zhǎ
zhā
zhái
zhài
zhǎi
zhāi
zhàn
zhǎn
zhān
zhàng
zhǎng
zhāng
zháo
zhào
zhǎo
zhāo
zhe
zhé
zhè
zhě
zhē
zhèi
zhèn
zhěn
zhēn
zhèng
zhěng
zhēng
zhí
zhì
zhǐ
zhī
zhòng
zhǒng
zhōng
zhóu
zhòu
zhǒu
zhōu
zhú
zhù
zhǔ
zhū
zhuǎ
zhuā
zhuǎi
zhuàn
zhuǎn
zhuān
zhuàng
zhuāng
zhuì
zhuī
zhǔn
zhūn
zhuó
zhuō



zòng
zǒng
zōng
zòu
zǒu



zuàn
zuān
zuì
zuǐ
zūn
zuó
zuò
zuǒ


á
à
ǎ
ā
ái
ài
ǎi
āi
àn
ǎn
ān
áng
āng
áo
ào
ǎo
āo
ba




bái
bài
bǎi
bāi
bàn
bǎn
bān
bàng
bǎng
bāng
báo
bào
bǎo
bāo
bei
bèi
běi
bēi
bèn
běn
bēn
bèng
běng
bēng




biàn
biǎn
biān
biǎo
biāo
bié
biè
biě
biē
bìn
bīn
bìng
bǐng
bīng
bo







cái
cài
cǎi
cāi
cán
càn
cǎn
cān
cáng
cāng
cáo
cǎo
cāo

cēn
céng
cèng
chá
chà
chǎ
chā
chái
chāi
chán
chàn
chǎn
chān
cháng
chàng
chǎng
chāng
cháo
chǎo
chāo
chè
chě
chē
chén
chèn
chéng
chèng
chěng
chēng
chí
chì
chǐ
chī
chóng
chòng
chǒng
chōng
chóu
chòu
chǒu
chōu
chú
chù
chǔ
chū
chuài
chuǎi
chuāi
chuán
chuàn
chuǎn
chuān
chuáng
chuàng
chuǎng
chuāng
chuí
chuī
chún
chǔn
chūn
chuò
chuō




cóng
cōng
còu


cuán
cuàn
cuì
cuī
cún
cùn
cūn
cuò
cuō
da




dài
dǎi
dāi
dàn
dǎn
dān
dàng
dǎng
dāng
dào
dǎo
dāo
de

děi
dèng
děng
dēng




diàn
diǎn
diān
diào
diāo
dié
diē
dìng
dǐng
dīng
diū
dòng
dǒng
dōng
dòu
dǒu
dōu




duàn
duǎn
duān
duì
duī
dùn
dǔn
dūn
duó
duò
duǒ
duō
é
è
ě
ē
ēn
ér
èr
ěr




fán
fàn
fǎn
fān
fáng
fàng
fǎng
fāng
féi
fèi
fěi
fēi
fén
fèn
fěn
fēn
féng
fèng
fěng
fēng

fǒu





gài
gǎi
gāi
gàn
gǎn
gān
gàng
gǎng
gāng
gào
gǎo
gāo




gěi
gēn
gèng
gěng
gēng
gòng
gǒng
gōng
gòu
gǒu
gōu



guà
guǎ
guā
guài
guǎi
guāi
guàn
guǎn
guān
guàng
guǎng
guāng
guì
guǐ
guī
gùn
gǔn
guo
guó
guò
guǒ
guō




hái
hài
hǎi
hāi
hán
hàn
hǎn
hān
háng
hàng
hāng
háo
hào
hǎo
hāo



hēi
hén
hèn
hěn
héng
hèng
hēng
heng
hóng
hòng
hǒng
hōng
hóu
hòu
hǒu




huá
huà
huā
huái
huài
huán
huàn
huǎn
huān
huáng
huàng
huǎng
huāng
huí
huì
huǐ
huī
hún
hùn
hūn
huó
huò
huǒ
huō




jia
jiá
jià
jiǎ
jiā
jiàn
jiǎn
jiān
jiàng
jiǎng
jiāng
jiáo
jiào
jiǎo
jiāo
jie
jié
jiè
jiě
jiē
jìn
jǐn
jīn
jìng
jǐng
jīng
jiǒng
jiù
jiǔ
jiū




juàn
juǎn
juān
jué
juè
jùn
jūn


kǎi
kāi
kàn
kǎn
kān
káng
kàng
kāng
kào
kǎo




kěn
kēng
kòng
kǒng
kōng
kòu
kǒu
kōu



kuà
kuǎ
kuā
kuài
kuǎn
kuān
kuáng
kuàng
kuāng
kuí
kuì
kuǐ
kuī
kùn
kǔn
kūn
kuò
la




lái
lài
lán
làn
lǎn
láng
làng
lǎng
láo
lào
lǎo
lāo
le


léi
lèi
lěi
lēi
léng
lěng
lēng
li




liǎ
lián
liàn
liǎn
liáng
liàng
liǎng
liáo
liào
liǎo
liāo
lie
lié
liè
liě
liē
lín
lìn
lǐn
líng
lìng
lǐng
liú
liù
liǔ
liū
lóng
lòng
lǒng
lóu
lòu
lǒu
lōu






luán
luàn
luǎn
lüè
lún
lùn
lūn
luo
luó
luò
luǒ
luō
ma




mái
mài
mǎi
mán
màn
mǎn
máng
mǎng
máo
mào
mǎo
māo
me
méi
mèi
měi
mén
mèn
mēn
méng
mèng
měng
mēng




mián
miàn
miǎn
miáo
miào
miǎo
miè
mín
mǐn
míng
mìng
miù




móu
mǒu



na




nài
nǎi
nán
nàn
náng
nāng
náo
nào
nǎo
ne


nèi
něi
nèn
néng



nián
niàn
niǎn
niān
niáng
niàng
niào
niǎo
niè
niē
nín
níng
nìng
nǐng
niú
niù
niǔ
nóng
nòng




nuǎn
nüè
nuó
nuò
òu
ǒu
ōu



pái
pài
pǎi
pāi
pán
pàn
pān
páng
pàng
pāng
páo
pào
pǎo
pāo
péi
pèi
pēi
pén
pèn
pēn
péng
pèng
pěng
pēng




pián
piàn
piān
piáo
piào
piǎo
piāo
piě
piē
pín
pìn
pǐn
pīn
píng
pīng



pōu








qià
qiǎ
qiā
qián
qiàn
qiǎn
qiān
qiáng
qiàng
qiǎng
qiāng
qiáo
qiào
qiǎo
qiāo
qié
qiè
qiě
qiē
qín
qǐn
qīn
qíng
qìng
qǐng
qīng
qióng
qiú
qiū




quán
quàn
quǎn
quān
qué
què
quē
qún
rán
rǎn
ráng
ràng
rǎng
rāng
ráo
rào
rǎo


rén
rèn
rěn
réng
rēng

róng
rǒng
róu
ròu



ruǎn
ruì
ruǐ
rùn
ruò



sài
sāi
sàn
sǎn
sān
sàng
sǎng
sāng
sào
sǎo
sāo

sēn
sēng
shá
shà
shǎ
shā
shài
shāi
shàn
shǎn
shān
shang
shàng
shǎng
shāng
sháo
shào
shǎo
shāo
shé
shè
shē
shén
shèn
shěn
shēn
shéng
shèng
shěng
shēng
shi
shí
shì
shǐ
shī
shòu
shǒu
shōu
shú
shù
shǔ
shū
shuà
shuǎ
shuā
shuài
shuǎi
shuāi
shuàn
shuān
shuǎng
shuāng
shuí
shuì
shuǐ
shùn
shǔn
shuò
shuō



sòng
sǒng
sōng
sòu
sōu



suàn
suān
suí
suì
suǐ
suī
sǔn
sūn
suò
suǒ
suō



tái
tài
tāi
tán
tàn
tǎn
tān
táng
tàng
tǎng
tāng
táo
tào
tǎo
tāo

téng




tián
tiǎn
tiān
tiáo
tiào
tiǎo
tiāo
tiè
tiě
tiē
tíng
tǐng
tīng
tóng
tòng
tǒng
tōng
tou
tóu
tòu
tōu




tuán
tuí
tuì
tuǐ
tuī
tún
tùn
tūn
tuó
tuò
tuǒ
tuō




wài
wāi
wán
wàn
wǎn
wān
wáng
wàng
wǎng
wāng
wéi
wèi
wěi
wēi
wén
wèn
wěn
wēn
wèng
wēng











xiá
xià
xiā
xián
xiàn
xiǎn
xiān
xiáng
xiàng
xiǎng
xiāng
xiáo
xiào
xiǎo
xiāo
xié
xiè
xiě
xiē
xìn
xīn
xíng
xìng
xǐng
xīng
xióng
xiōng
xiù
xiǔ
xiū




xuán
xuàn
xuǎn
xuān
xué
xuè
xuě
xuē
xún
xùn
xūn
ya




yán
yàn
yǎn
yān
yáng
yàng
yǎng
yāng
yáo
yào
yǎo
yāo








yín
yìn
yǐn
yīn
yíng
yìng
yǐng
yīng
yo

yòng
yǒng
yōng
yóu
yòu
yǒu
yōu




yuán
yuàn
yuǎn
yuān
yuè
yuē
yún
yùn
yǔn
yūn



zài
zǎi
zāi
zán
zàn
zǎn
zàng
zāng
záo
zào
zǎo
zāo


zéi
zěn
zèng
zēng
zhá
zhà
zhǎ
zhā
zhái
zhài
zhǎi
zhāi
zhàn
zhǎn
zhān
zhàng
zhǎng
zhāng
zháo
zhào
zhǎo
zhāo
zhe
zhé
zhè
zhě
zhē
zhèi
zhèn
zhěn
zhēn
zhèng
zhěng
zhēng
zhí
zhì
zhǐ
zhī
zhòng
zhǒng
zhōng
zhóu
zhòu
zhǒu
zhōu
zhú
zhù
zhǔ
zhū
zhuǎ
zhuā
zhuǎi
zhuàn
zhuǎn
zhuān
zhuàng
zhuāng
zhuì
zhuī
zhǔn
zhūn
zhuó
zhuō



zòng
zǒng
zōng
zòu
zǒu



zuàn
zuān
zuì
zuǐ
zūn
zuó
zuò
zuǒ

animation修改ngui widget alpha无效的问题

<code>UIPanel.alpha is a property, and Unity is not able to animate properties. What you are animating instead is "MAlpha", I'm guessing -- which is a private variable. The fact that Unity lets you do that is a bug in Unity that has existed for ages.

You need to use an intermediate script -- AnimatedAlpha.

Attach it to your panel (or a widget) and animate its alpha instead of the panel when using the Unity's animation system.</code>

Unity中扩展GameObject类

今天看代码时看到一个之前不知道的技巧,可以扩展Unity的GameObject类,为GameObject添加自己定义的方法:

using UnityEngine;
using System.Collections;

public static class GameObjectEx  {

    public static T MakeSureComponent<T>(this GameObject gameObject) where T : Component
    {
        T t = gameObject.GetComponent<T>();
        if (t == null)
        {
            t = gameObject.AddComponent<T>();
        }
        return t;
    }

}

这个类添加在工程中后,所以的gameObject上都可以直接调用MakeSureCompoent这个方法,真是超级便捷.

this.m_footstepHandler = base.gameObject.MakeSureComponent<FootstepHandler>();

同理,Unity自带的其它类应该也是可以进行扩展的。

查找了下是哪个天才想到的这个办法,google找到最早的一篇是这个:

https://forum.unity3d.com/threads/howto-add-method-to-the-gameobject-class-ie-add-custom-variables-to-every-instance.89791/

c/c++ 与 lua之前互调的性能测试

完整测试代码如下:

测试目标主要是看看c与lua之前互调的性能如何。

测试结论:c调用lua与lua调用c基本只有一个数量级的性能损失。

从c中调用lua,使用缓存ref的方式,可以提升30%的性能。

#include <lua.h>
#include <lauxlib.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/time.h>
#include "skynet.h"

// 取当前毫秒值
static int
ltime(lua_State *L) {
	struct timeval tv;
	gettimeofday(&tv,NULL);
	lua_pushinteger(L,tv.tv_sec*1000+tv.tv_usec/1000);
	return 1;
}

// 供lua调用,内部无业务逻辑
static int
ltest1(lua_State *L) {
        return 0;
}

// 供lua调用, 内部int相加并返回
static int
ltest2(lua_State *L) {
	int a1=luaL_checkinteger(L,1);
	int a2=luaL_checkinteger(L,2);
	lua_pushinteger(L,a1+a2);
	return 1;
}
// 内部调用lua中方法
static int
ltest3(lua_State *L) {
	lua_getglobal(L,"global_test_func1");
	lua_call(L,0,0);
	return 0;
}
// 内部调用lua中方法,并取得lua中返回值
static int
ltest4(lua_State *L) {
	lua_getglobal(L,"global_test_func2");
	lua_pushinteger(L,1);
	lua_pushinteger(L,2);
	lua_call(L,2,1);
	int sum = (int)lua_tointeger(L, -1); 
	lua_pop(L, 1); 
	lua_pushinteger(L,sum);
	return 1;
}
// 内部调用lua方法10000次
static int
ltest5(lua_State *L) {
	int sum=0;	

	for(int m=0;m<10000000;m++){
        	lua_getglobal(L,"global_test_func2");
        	lua_pushinteger(L,1);
        	lua_pushinteger(L,2);
        	lua_call(L,2,1);
        	sum=(int)lua_tointeger(L, -1);
		lua_pop(L, 1); 
	}

        lua_pushinteger(L,sum);
        return 1;
}
// 和test5一起对比
static int
ltest6(lua_State *L) {
        for(int m=0;m<10000000;m++){
                lua_getglobal(L,"global_test_func2");
                lua_pushinteger(L,1);
                lua_pushinteger(L,2);
                lua_call(L,2,1);
                lua_pop(L, 1);
        }
        lua_pushinteger(L,3);
        return 1;
}
// 和test5一起做对比
static int
ltest7(lua_State *L) {
	int func2_handler;
	lua_getglobal(L,"global_test_func2");
	func2_handler=luaL_ref(L,LUA_REGISTRYINDEX);

	for(int m=0;m<10000000;m++){
		lua_rawgeti(L,LUA_REGISTRYINDEX,func2_handler);
		lua_pushinteger(L,1);
		lua_pushinteger(L,2);
		lua_call(L,2,1);
		lua_pop(L,1);
	}
	
	//luaL_unref(L,LUA_REGISTRYINDEX);
	lua_pushinteger(L,3);
	return 1;
}

// 和test5一起做对比一下
int add(int a,int b){
	return a+b;
}
static int
ltest8(lua_State *L) {
	for(int m=0;m<10000000;m++){
		add(1,2);
	}
	return 0;
}


// full userdata

// light userdata

int
luaopen_perf(lua_State *L) {
        luaL_checkversion(L);
        luaL_Reg l[] = {
		{ "time",  ltime  },
                { "test1", ltest1 }, // 从lua中直接调用c,内部无逻辑
                { "test2", ltest2 },
		{ "test3", ltest3 },
		{ "test4", ltest4 },
		{ "test5", ltest5 },
		{ "test6", ltest6 },
		{ "test7", ltest7 },
		{ "test8", ltest8 },
                { NULL, NULL}
        };
        luaL_newlib(L,l);

        return 1;
}

lua代码:

require "common"

local perf = require "perf"


function global_test_func1()
--	print("global_test_func1")
end
function global_test_func2(a,b)
	return a+b
end
local t1
local t2

t1=perf.time()
for i=1,10000000 do
	perf.test1()
end
t2=perf.time()
print("test1:"..(t2-t1))

t1=perf.time()
for i=1,10000000 do
	perf.test2(1,2)
end
t2=perf.time()
print("test2:"..(t2-t1))

t1=perf.time()
for i=1,10000000 do
	perf.test3()
end
t2=perf.time()
print("test3:"..(t2-t1))

t1=perf.time()
for i=1,10000000 do
	perf.test4()
end
t2=perf.time()
print("test4:"..(t2-t1))

t1=perf.time()
perf.test5()
t2=perf.time()
print("test5:"..(t2-t1))

t1=perf.time()
perf.test6()
t2=perf.time()
print("test6:"..(t2-t1))

t1=perf.time()
perf.test7()
t2=perf.time()
print("test7:"..(t2-t1))

t1=perf.time()
perf.test8()
t2=perf.time()
print("test8:"..(t2-t1))

运行结果:

test1:470
test2:777
test3:1619
test4:1941
test5:1490
test6:1437
test7:675
test8:40

一个hashmap算法

阅读云风开源的AOI实现时,看到里面有一个hashmap算法实现。

https://github.com/cloudwu/aoi

这里记录下分享下其实现

map内部存储是使用数组实现即  map_slot,初始分配16个。容量不足时,以翻倍容量增加,并将对象重新进行分配至新的内存空间。

这里画图举例时以初始容量为8进行原理说明:

1、初始状态,所有slot处于未分配

2、插入A,使用hash算法计算出应该分配在哪个slot上(注:可以考虑添加扰动函数避免比较差的hash算法,这里针对aoi的情况,直接使用了对size取模)

假设对A取模后将其放入第三个slot

3、继续插入B和C,其中B和A取模后 不在相同的slot中。

然后是取模后分配到相同的slot的情况:

实际上两个对象不会存在相同的slot中。

这里如果出现分配的slot中已经存在对象了,比如此时,C分配的第三个slot已经存在A了。

则从数组最尾部向前查找第一个为空的slot,将C放入,并将A.next指向C所在的slot

 

4、继续插入一个和A相同slot的对象时,继续从尾部向前查找一个空的slot,并将A.next指向新分配的slot,新分配的slot.next指向原A.next ( 即C)

5、如果遇到分配的slot被其它slot的对象占用如何处理。

比如,我这里想分配E,取模后应该分配在第七个格子,但第七个格子已经被D占用。

这里采用的方式,是将D取出( 因为D取模不应该分配在第七个格子,只是因为第三个格子被占用了,所以才从尾部查找的一个空闲的格子放D),取出D后将E放后,如下图:

 

这里D被取出应该如何处理,再执行一个第1步,将D放hashmap即可。

 

游戏中重构了网络模块

我们游戏中断线和超时这一块出问题非常多。

这一次我专门抽出了一周时间,了解了下c#下的socket相关函数重写了网络模块。

首要目标是避免另开线程,使用nio。然后是内部处理超时,断线和其它IO异常,重连3次失败后,才提交给游戏自己处理。重连时,自动登陆并续发消息。

这里本来还需要添加一个补发消息的机制(断线后网络传输中导致丢失的消息),但是测试只有续发消息,已经解决掉了原来99%问题。所以补发消息先放一下,先再重构其它地方。

重构后测试的结果非常好,以前各种网络问题都没有复现,断线对玩家来说是不可见的,只要长时间断线(三次重连失败)才会给玩家一个提示框,让玩家手动点击去重连。

//----------------------------------------------
//           NET        : NetManager
//           AUTHOR: zhu kun qian
//----------------------------------------------

using System.IO;

public class NetMsg
{
    // 有必要用id吗?
    // 
    public cmd.CmdType cmdType;
    public uint loop;// 唯一的循环id
    public byte[] data;// protobuf二进制数据
    public byte[] totalData;//完整的消息二进制数据
    public MemoryStream netdata;

    // 这里能避免一次array copy不?
    // TODO:暂不考虑这避免arry copy的消耗,以后有时间时,可以考虑处理下。
}

 

//----------------------------------------------
//           NET        : NetManager
//           AUTHOR: zhu kun qian
//----------------------------------------------

using System.Net;
using System.Net.Sockets;
using System.Runtime.Remoting.Messaging;
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;

/*
 * 没有使用任何阻塞函数。
 * 
 * connect是block函数,所以改为使用ConnectAsync, beginConnect也是异步,也可以使用
 * 
 * 连接成功后,socket修改为non-blocking
*/
public class NetManagerSocket
{

    // 如果断开连接,直接new socket

    public string ip;
    public int port;

    private Socket socket;
    private byte[] readBuf = new byte[64 * 1024];// 最高缓存接收64k数据。

    private int readBufIndex = 0;//已经从readBuf中读取的字节数
    private int available = 0;// readbuf已经从socket中接收的字节数

    public SocketError socketError = SocketError.Success;// 这里应该是传递到上层,还是在这里处理?

    // ---------------------------------------
    // -- decoder相关
    private int length = 0;// protobuf消息体中的长度
    private int needRead = 0;// protobuf消息体中剩余需要读取的长度
    // ---------------------------------------

    public void connect()
    {
        socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
        socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 5000);// 设置5秒发送超时
        socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, false);
        socket.NoDelay = true;
        // socket.Blocking = false;
        socket.Blocking = true;//设置为非阻塞

        socketError = SocketError.Success;

        Debug.Log("dontLinger:" + socket.GetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontLinger));
        try
        {
            // 这里需要修改为异步connect
            // http://msdn.microsoft.com/en-us/library/d7ew360f%28v=vs.110%29.aspx
            // Connect method will block, unless you specifically set the Blocking property to false prior to calling Connect.
            // If you are using a connection-oriented protocol like TCP and you do disable blocking, Connect will throw a SocketException because it needs time to make the connection
            // 结论:很奇怪,并没有按文档上描述的执行,设置为blocking,并没有抛出异常。

            // socket.Connect(ip, port);

            // The asynchronous BeginConnect operation must be completed by calling the EndConnect method.
            // IAsyncResult result= socket.BeginConnect(ip, port, new AsyncCallback(connectCallback), socket);

            // Debug.Log("asyncResult is completed:"+result.IsCompleted);

            // 异步处理必须设置为blocking,why?
            //*
            SocketAsyncEventArgs eventArgs = new SocketAsyncEventArgs();
            eventArgs.RemoteEndPoint = new IPEndPoint(IPAddress.Parse(ip), port);
            eventArgs.Completed += new EventHandler<SocketAsyncEventArgs>(connectCallback2);
            eventArgs.UserToken = socket;

            socket.ConnectAsync(eventArgs);

            // */
            // 这里需要添加超时处理吗?
        }
        catch (Exception ex)
        {
            Debug.LogError("socket connection exception:" + ex);
            socketError = SocketError.ConnectionRefused;
        }
    }

    private void connectCallback2(object src, SocketAsyncEventArgs result)
    {
        Debug.Log("connectCallback2, isCompleted:" + result + " " + result.SocketError);
        if (result.SocketError != SocketError.Success)
        {
            socketError = result.SocketError;
        }
        else
        {
            Socket socket = (Socket)src;
            socket.Blocking = false;
        }
    }

    void connectCallback(IAsyncResult result)
    {
        Debug.Log("connectCallback22, isCompleted:" + result.IsCompleted);
        // connected = true;
        try
        {
            Socket socket = (Socket)result.AsyncState;
            socket.EndConnect(result);

            Debug.Log("socket is connected:" + socket.Connected);
            socket.Send(new byte[] { });
        }
        catch (Exception e)
        {
            Debug.LogError("error:" + e);
            socketError = SocketError.ConnectionRefused;
        }
    }

    public void disconnect()
    {
        if (socket != null)
        {
            socket.Close();
            socket = null;
        }
    }

    //

    public NetMsg read()
    {
        // 这里同步读也可以,但只读数据接收到足够一个消息的情况
        // 使用availed预判进行同步读,不会阻塞主线程
        // 解析消息放在这里。
        if (socket != null && socket.Available > 0)
        {
            if (available == 0)
            {
                if (socket.Available < 12)
                {
                    // 一个数据包,最小为12字节
                    return null;
                }
                // 开始从socket中读入一条数据
                // 如果足够,就直接解析为消息返回
                // 如果不够,就将数据放在cache中

                socketRead(2);
                if (socketError != SocketError.Success)
                {
                    return null;
                }

                length = readUshort();

                if (length == 0)
                {
                    socketRead(4);
                    if (socketError != SocketError.Success)
                    {
                        return null;
                    }
                    length = readInt();
                }
                int socketAvailable = socket.Available;
                needRead = length;
                if (socketAvailable < needRead)
                {
                    // 不足时,socket有多少缓存数据就读多少
                    socketRead(socketAvailable);
                    if (socketError != SocketError.Success)
                    {
                        return null;
                    }

                    needRead = needRead - socketAvailable;
                    return null;
                }
                else
                {
                    // 数据足够,解析数据
                    socketRead(needRead);
                    if (socketError != SocketError.Success)
                    {
                        return null;
                    }
                    return readMsg();
                }
            }
            else
            {
                // 继续从socket中接收数据
                int socketAvailable = socket.Available;
                if (socketAvailable < needRead)
                {
                    // 数据依旧不足
                    socketRead(socketAvailable);
                    if (socketError != SocketError.Success)
                    {
                        return null;
                    }

                    needRead = needRead - socketAvailable;
                    return null;
                }
                else
                {
                    // 数据足够,解析数据
                    socketRead(needRead);
                    if (socketError != SocketError.Success)
                    {
                        return null;
                    }

                    return readMsg();
                }
            }
        }
        return null;
    }

    private void readReset()
    {
        // 读入一个完整消息后,重置数据
        available = 0;
        readBufIndex = 0;
        length = 0;
        needRead = 0;
    }
    private NetMsg readMsg()
    {
        NetMsg netMsg = new NetMsg();

        UInt32 loop = readUInt();
        short cmdId = readShort();

        byte[] protoData = null;
        if (cmdId > 0)
        {
            protoData = new byte[length - 10];
            Array.Copy(readBuf, readBufIndex, protoData, 0, length - 10);
        }
        else
        {
            // 有压缩
            MemoryStream inms = new MemoryStream(readBuf, readBufIndex, length - 10);
            MemoryStream outms = new MemoryStream();
            SevenZipTool.Unzip(inms, outms);
            protoData = outms.ToArray();
            cmdId = (short)-cmdId;
        }
        

        netMsg.loop = loop;
        netMsg.cmdType = (cmd.CmdType)cmdId;
        netMsg.data = protoData;
        netMsg.netdata=new MemoryStream(protoData);
        readReset();
        return netMsg;
    }

    private short readShort()
    {
        short ret = BitConverter.ToInt16(readBuf, readBufIndex);
        readBufIndex += 2;
        return Endian.SwapInt16(ret);
    }
    private ushort readUshort()
    {
        ushort ret = BitConverter.ToUInt16(readBuf, readBufIndex);
        readBufIndex += 2;
        return Endian.SwapUInt16(ret);
    }

    private int readInt()
    {
        int ret = BitConverter.ToInt32(readBuf, readBufIndex);
        readBufIndex += 4;
        return Endian.SwapInt32(ret);
    }

    private uint readUInt()
    {
        uint ret = BitConverter.ToUInt32(readBuf, readBufIndex);
        readBufIndex += 4;
        return Endian.SwapUInt32(ret);

    }
    private void socketRead(int readLen)
    {    //从socket中读入数据入在readBuf中
        socket.Receive(readBuf, available, readLen, SocketFlags.None, out socketError);
        if (socketError != SocketError.Success)
        {
            Debug.LogError("socket Read error:" + socketError);
        }
        available += readLen;
    }

    public int send(NetMsg netMsg, int offset)
    {
        if (netMsg.totalData == null)
        {
            encode(netMsg);
        }

        int sendNum = socket.Send(netMsg.totalData, offset, netMsg.totalData.Length - offset, SocketFlags.None, out socketError);
        if (socketError != SocketError.Success)
        {
            Debug.LogError("socket send error:" + socketError);
            return 0;
        }

        if (sendNum + offset == netMsg.totalData.Length)
        {
            return -1;//标志,全部发送完成
        }
        return sendNum;
    }


    private void encode(NetMsg netMsg)
    {
        MemoryStream outstream = new MemoryStream();
        byte[] _t = null;

        int totalLength = netMsg.data.Length + 10;
        if (totalLength > 65535)
        {
            _t = BitConverter.GetBytes(Endian.SwapInt16((short)0));
            outstream.Write(_t, 0, _t.Length);
            _t = BitConverter.GetBytes(Endian.SwapInt32(totalLength));
            outstream.Write(_t, 0, _t.Length);
        }
        else
        {
            _t = BitConverter.GetBytes(Endian.SwapInt16((short)totalLength));
            outstream.Write(_t, 0, _t.Length);
        }

        _t = BitConverter.GetBytes(Endian.SwapUInt32(netMsg.loop));
        outstream.Write(_t, 0, _t.Length);
        _t = BitConverter.GetBytes(Endian.SwapInt16((short)netMsg.cmdType));
        outstream.Write(_t, 0, _t.Length);
        outstream.Write(netMsg.data, 0, netMsg.data.Length);
        _t = BitConverter.GetBytes(Endian.SwapInt32((int)0));
        outstream.Write(_t, 0, _t.Length);

        _t = outstream.ToArray();
        netMsg.totalData = _t;
    }

    public bool isConnected()
    {
        return socket != null && (socket.Connected);
    }
}
//----------------------------------------------
//           NET        : NetManager
//           AUTHOR: zhu kun qian
//----------------------------------------------

using System;
using System.Linq;
using System.Net.Sockets;

using UnityEngine;
using System.Collections.Generic;
using System.IO;


public class NetManager
{
    public uint loop;// 永不重复,一直加1

    public string ip = "";
    public int port = 0;

    private NetManagerSocket socket = null;

    private int maxQuerySize = 100;//接收和发送最多cache 100条消息
    private int maxReconnectTimes = 3;//重连最多重试3次

    // 发送相关
    public Queue<NetMsg> msgQuery = new Queue<NetMsg>(); // 发送消息队列
    public NetMsg reconnectTokenLogin = null;//重连发送的登陆消息
    public bool loginSuccess = false;

    private int sendBytes = 0;
    private float sendBytesTimeout = 0f; // 发送消息超时

    // 接收的消息队列
    private Queue<NetMsg> receviedMsgQueue = new Queue<NetMsg>();// 从服务器接收到的消息

    private int reconnectTryTimes = 0; // 重连次数
    private float connectTimeout = 0f; // 连接超时
    public EventDelegate.Callback reconnectErrorCallback; // 如果出现内部无法处理的得连(1、连试3次无法重连成功 2、累积的消息数量过量,需要重启游戏客户端)
    

    // 如果断线后,是使用原socket重连,还是使用新的socket?新new出来
    public static NetManager Instance = null;
    public NetManager()
    {
        Instance = this;
    }

    public bool isConnected()
    {
        return socket != null && socket.isConnected();
    }
    public void connect()
    {
        if (socket != null)
        {
            Debug.LogError("socket is not closed,try close");
            socket.disconnect();
        }

        Debug.Log("start connect ip:" + ip + " port:" + port);

        socket = new NetManagerSocket();
        socket.ip = ip;
        socket.port = port;
        socket.connect();

        sendBytes = 0;
        sendBytesTimeout = 0f;

        connectTimeout = 0f;
    }

    public void disconnect()
    {
        if (socket == null)
        {
            Debug.LogError("socket is null");
            return;
        }
        socket.disconnect();
        socket = null;
    }

    public void onUpdate()
    {
        // 每祯执行,没有阻塞
        if (socket != null)
        {
            // 改为在socket中处理呢
            if (socket.socketError != SocketError.Success)
            {
                // 如果遇到sokcet错误,不需要等等超时,立即重连
                Debug.LogError("socket error:" + socket.socketError);
                tryReconnect();
                return;
            }

            if (socket.isConnected())
            {
                NetMsg msg = socket.read();
                if (msg != null)
                {
                    receviedMsgQueue.Enqueue(msg);
                }
                NetMsg netMsg = null;
                if (reconnectTokenLogin != null)
                {
                    netMsg = reconnectTokenLogin;
                }
                else
                {
                    if (loginSuccess)
                    {
                        lock (msgQuery)
                        {
                            if (msgQuery.Count > 0)
                            {
                                netMsg = msgQuery.First();
                            }
                        }
                    }
                }
                if (netMsg != null)
                {
                    socketSend(netMsg);
                }
            }
            else
            {
                if (connectTimeout == 0f)
                {
                    connectTimeout = Time.realtimeSinceStartup;
                }
                else if (Time.realtimeSinceStartup - connectTimeout > 5)
                {
                    // 连接5秒超时,处理重连
                    tryReconnect();
                }
            }
        }
    }

    private void tryReconnect()
    {
        if (reconnectTryTimes >= 3)
        {
            // 跳出错误处理回调,交给外部处理
            if (reconnectErrorCallback != null)
            {
                reconnectErrorCallback();
            }
            disconnect();
            return;
        }
        Debug.LogError("socket connect timeout, try reconnect:" + reconnectTryTimes + " " + socket.socketError);
        reconnectTryTimes++;
        disconnect();
        connect();
        // 重试需要,重新发送登陆消息505
        LoginState.Instance.loginWithTokenSub(true);

    }

    public NetMsg readMsg()
    {
        if (receviedMsgQueue.Count == 0)
        {
            return null;
        }
        return receviedMsgQueue.Dequeue();
    }

    // true:超时
    private void socketSend(NetMsg netMsg)
    {
        // 发送数据
        bool newMsg = false;// 新发送的消息
        if (sendBytes == 0)
        {
            newMsg = true;

        }
        int num = socket.send(netMsg, sendBytes);
        if (num > 0)
        {
            sendBytes += num;
        }
        if (num == -1)
        {
            // 全部发送完成
            if (cmd.CmdType.tokenLogin == netMsg.cmdType)
            {
                reconnectTokenLogin = null;
            }
            else
            {
                lock (msgQuery)
                {
                    msgQuery.Dequeue();
                }
            }
            sendBytes = 0;
            sendBytesTimeout = 0f;
        }
        else
        {
            // 未发送完成,处理超时逻辑
            if (newMsg)
            {
                sendBytesTimeout = Time.realtimeSinceStartup;
            }
            else
            {
                // 检查时间是否超时
                if (Time.realtimeSinceStartup - sendBytesTimeout > 5)
                {
                    // 超过5秒
                    Debug.LogError("socket timeout.try reconnect");
                    // 重连重发
                    if (socket.socketError != SocketError.Success)
                    {
                        Debug.LogError("socket error:" + socket.socketError);
                    }
                    socket.socketError = SocketError.TimedOut;
                }
            }
        }
    }

    public void SendCmd<T>(cmd.CmdType cmdType, T protoObj)
    {
        send(cmdType,protoObj);
    }
    public void send<T>(cmd.CmdType cmdType, T protoObj)
    {
        NetMsg netMsg = new NetMsg();
        netMsg.loop = ++loop;
        netMsg.cmdType = cmdType;

        MemoryStream outms = new MemoryStream();
        ProtoBuf.Serializer.Serialize(outms, protoObj);
        netMsg.data = outms.ToArray();

        // todo:因为放在onupdate中,感觉这个lock也是可以避免掉的。暂时先加上,以后测试后再考虑去掉。
        // 只要能确认不会多线程操作,就可以去掉这个lock
        if (cmdType == cmd.CmdType.tokenLogin)
        {
            reconnectTokenLogin = netMsg;
            loginSuccess = false;
            return;
        }
        lock (msgQuery)
        {
            msgQuery.Enqueue(netMsg);
            // 在onupdate中发送,这样只差3ms,是可以接受的
        }

        if (msgQuery.Count > maxQuerySize)
        {
            Debug.LogError("msgQuery more than max size:" + msgQuery.Count);
        }
    }
}








2015.01.19记:我重构时,未添加断线补发未送达的消息,我们客户端写的逻辑不严谨,在登陆游戏按钮上连续多次点击,会导致卡住登陆。我这里只是使用禁止多次点击来避免这个问题,如果使用有断线补发未送达的消息也可以不会出现这个问题。总之,不要依赖客户端代码很强壮,最好还是添加上断线补发消息。

opengles中画四边型

opengles中仅支持以下几种模型:

/* BeginMode */
#define GL_POINTS                         0x0000
#define GL_LINES                          0x0001
#define GL_LINE_LOOP                      0x0002
#define GL_LINE_STRIP                     0x0003
#define GL_TRIANGLES                      0x0004
#define GL_TRIANGLE_STRIP                 0x0005
#define GL_TRIANGLE_FAN                   0x0006

所以如果需要画一个四边型,需要借助GL_TRIANGLES_STRIP

static const GLfloat vertices[] = { -1.0, 1.0, -0.0, 1.0, 1.0, -0.0, -1.0,
-1.0, -0.0, 1.0, -1.0, -0.0 };

static const GLfloat texCoords[] =
{ 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0 };

glBindTexture(GL_TEXTURE_2D, 1);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

如此即可画出一个四边型

android&ios

curl库可以用在android ndk及ios上。

所以网络相关的功能,可以使用curl进行开发。

java.io.IOException: error=12, Cannot allocate memory 解决方案

java调用本地指令报以上错误。

执行:

echo 1 > /proc/sys/vm/overcommit_memory

后,错误消失。

js调用flash需要注意地方

获取flash对象的方法。

在网上查找的很多js获取flash对象的方法,不兼容IE9,这里提供一个能兼容IE9的方法。同时兼容其它浏览器。

function thisMovie(movieName) {
if (navigator.appName.indexOf(“Microsoft”) != -1) {
//alert(“IE”);
if (typeof (window[movieName].qqBuyUpdate) == ‘function’) {
// < IE9
return  window[movieName];
}
else if (typeof (document[movieName].qqBuyUpdate) == ‘function’) {
// >= IE9
return  document[movieName];
}
}
else {
// NON IE
return  document[movieName];
}
}

 

在js里面调用flash:

thisMovie(“client”).qqBuyUpdate();


Warning: Use of undefined constant XML - assumed 'XML' (this will throw an Error in a future version of PHP) in /opt/wordpress/wp-content/plugins/wp-syntaxhighlighter/wp-syntaxhighlighter.php on line 1048