嵌入式系统汉字输入

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

{

相关文档
最新文档