嵌入式系统汉字输入
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/bbs/viewthread.php?tid=8868&extra=page%3D2
1.简单知识
中文输入发我不多说,大家都用过,目前嵌入式系统中比较典型的中文输入法有诺基亚的T9 、摩托罗拉的 i T A P 、爱立信的字能等,这些输入法的输入设备一般是数字键0 ~ 9和一些功能键组成。除了支持中文的拼音和笔画外还支持诸如日文、韩文等其他国家的语言。中文输入法可分为拼音输入和笔画输入。一般情况下拼音输入法相对笔画输入法,重码率要高,但简单易用,(再加个模式识别进行手写输入就更高级了,呵呵),我这里也是拼音输入,由于空间有效,不支持联想功能.
2. 硬软件
硬件用的NXP的2138,LCD是台湾雄铎科技的,240*160,软件用的zlg的模板,uc2.52版,按键布局与手机一样,如"2"键为abc,"3"为def,等等
3.前期准备
3.1网上有许多的资料,给出了键盘数字组合对应的拼音组合和汉字组合,我也利用这个,如{"2","a",(char *)PY_mb_a},
{"24","ai",(char *)PY_mb_ai},
{"26","an",(char *)PY_mb_an},
{"26","ao",(char *)PY_mb_ao},
{"22","ba",(char *)PY_mb_ba},
{"24","bi",(char *)PY_mb_bi},
const char PY_mb_a[] ={"阿啊"};
const char PY_mb_ai[] ={"矮蔼艾爱隘碍霭"};
但有个问题,这个网上流传的拼音-汉字组合中汉字非常少,对于输入是远远不够的,比如说"汶川"的汶就没有,而且没有多音字,例如"还"的拼音属于"huan",你打"还"就没有,这对于输入是不可以接收的,下面我讲一下我的解决方法.
3.2寻找所有汉字的拼音,这个如果打开字典一个一个的输,恐怕没有一个月是干不成了,庆幸的是有人替我们做好了,在万能五笔输入法中有一个拼音记录文件,几乎包括了所有的汉
字,拿来所用
py_gb.rar (264.6 KB)
这个文件中,有许多词组,是我们不需要的,需要剔掉,但手工的方式工作量太大,这里我们发
挥计算机比较傻的优势来做这件事,用到一些VC的基本知识,相信大家都有这个能力
CStdioFile read_file,read_new_file;
CStdioFile write_file;
CString my_str,temp_str,tf="";
read_file.Open( "py_gb.txt", CFile::modeRead,NULL ) ;
write_file.Open( "new_py_gb.txt", CFile::modeCreate | CFile::modeWrite,NULL ) ;
while (read_file.ReadString(my_str))
{
int i = my_str.Find(" ");
if ((my_str.GetLength() - i) > 3)
{
/* 是词组 */
continue;
}
else
{
/* 保存到文件 */
write_file.WriteString(my_str);
write_file.WriteString("\n");
}
}
read_file.Close();
write_file.Close();
原理也非常简单,如果是词组,汉字的个数肯定大于1,在vc中,一个ASCII占一个字节,一个
汉字占两个字节,整理后的文件如下
new_py_gb.rar (65.71 KB)
3.3
在文件new_py_gb.txt中,列出了每个字的拼音,如
a 啊
a 阿
a 呵
a 吖
a 嗄
a 腌
a 锕
a 錒
aes 厑
ai 爱
ai 矮
ai 挨
ai 哎
ai 碍
ai 癌
ai 艾
ai 唉
ai 哀
ai 蔼
到这里又产生一个问题,必须将所有的同音汉字组合在一起,例如拼音为a的,应该这样
a啊阿呵吖嗄腌锕錒
vc程序如下:
read_file.Open( "py_file.c", CFile::modeRead,NULL ) ;
read_new_file.Open("new_py_gb.txt", CFile::modeRead,NULL);
write_file.Open( "zhenli.txt", CFile::modeCreate | CFile::modeWrite,NULL ) ;
while (read_file.ReadString(my_str))
{
int i = my_str.Find(",");
int j = my_str.Find(",",i);
temp_str = my_str.Mid(i + 2, j - 3);
CString save_str = temp_str;
while (read_new_file.ReadString(tf))
{
int ll = tf.Find(" ");
if (tf.Left(ll) == temp_str)
{