详解MTK系统中字符转换问题

来源:互联网 发布:grid.base.js 编辑:程序博客网 时间:2024/04/30 11:23

详解MTK系统中字符转换问题

2011-09-05 19:02 佚名 互联网 字号:T | T
一键收藏,随时查看,分享好友!

MTK系统中字符转换问题是本文要介绍的内容,主要是来了解并学习MTK中一些小案例的应用,具体内容来看本文详解。

AD:2014WOT全球软件技术峰会北京站 课程视频发布

MTK系统中字符转换问题是本文要介绍的内容,主要是来了解并学习MTK中一些小案例的应用,具体内容来看本文详解。如果我不想在ref_list.txt文件中加入我们的字符串字符,那么我们是否可以直接在代码里定义字符串呢?例如中文字符串,因为在代码里定义的中文字符串都是GB码的,而MTK系统对于字符函数API都只接受UNICODE编码的。

我们可以通过文件conversion.c文件中的函数mmi_chset_text_to_ucs2(.... )函数对GB编码的字符串进行转换;但是使用该函数是必须将宏__MMI_CHSET_GB2312__打开,否则转换后必定显示乱码;为什么会这样呢?我们看入下代码片断:

在conversion.c中的头部有如下代码片断:

  1. #if defined(__MMI_CHSET_BIG5__)  
  2. mmi_chset_enum g_chset_text_encoding = MMI_CHSET_BIG5;  
  3. #elif defined(__MMI_CHSET_GB2312__)  
  4. mmi_chset_enum g_chset_text_encoding = MMI_CHSET_GB2312;  
  5. #else   
  6. mmi_chset_enum g_chset_text_encoding = MMI_CHSET_UTF8;  
  7. #endif  

由此可见,如果我们不打开__MMI_CHSET_GB2312__宏,g_chset_text_encoding 就是不是MMI_CHSET_GB2312 值;而是其它值,则函数mmi_chset_text_to_ucs2(....)就不能对GB编码的字符串进行转换。

mmi_chset_text_to_ucs2(....)函数片断:

  1. kal_int32 mmi_chset_text_to_ucs2(kal_uint8 *dest, kal_int32 dest_size, kal_uint8 *src)  
  2. {  
  3.  /*----------------------------------------------------------------*/  
  4.  /* Local Variables*/  
  5.  /*----------------------------------------------------------------*/  
  6.  /*----------------------------------------------------------------*/  
  7.  /* Code Body*/  
  8.  /*----------------------------------------------------------------*/  
  9.  return mmi_chset_convert(g_chset_text_encoding, MMI_CHSET_UCS2, (char*)src, (char*)dest, dest_size);  

问题是我们如何打开宏__MMI_CHSET_GB2312__呢?

我们来看看MKT的features配置文件——MMI_features.h中的片断。

  1. #if defined(CFG_MMI_CHSET_GB2312) && (CFG_MMI_CHSET_GB2312 == __ON__) || \  
  2.  (defined(__MMI_LANG_CHSET_DEPENDENCE__) && defined(__MMI_LANG_SM_CHINESE__))  
  3.  #ifndef __MMI_CHSET_GB2312__  
  4.  #define __MMI_CHSET_GB2312__  
  5.  #endif  
  6. #endif 

那么宏CFG_MMI_CHSET_GB2312又在哪里呢?????

我们看看文件MMI_features_switch.h代码片断如下:

  1. /*  
  2.   Description: Turn on simple Chinese GB2312 charset  
  3.   Option: [__ON__, __OFF__, __AUTO__]  
  4.   Reference: SOP_Add_New_Charset_Conversion.doc  
  5. */  
  6.  
  7. #define CFG_MMI_CHSET_GB2312 (__AUTO__) 

[疑问]在配置文件MMI_features_type.h中有如下定义

  1. /* general on/off/auto type */  
  2. #define __ON__ (-1)  
  3. #define __OFF__(-2)  
  4. #define __AUTO__  (-3) 

其中__AUTO__ 不知道是什么意思??????

当然如果__MMI_CHSET_GB2312__没有被Enable,我们可以直接使用函数mmi_chset_convert()

该函数原形如下所示:

  1. /*****************************************************************************  
  2.  * FUNCTION  
  3.  *  mmi_chset_convert  
  4.  * DESCRIPTION  
  5.  *  Convert string between 2 character sets. (will add the terminate character)  
  6.  * PARAMETERS  
  7.  *  src_type  [IN]  Charset type of source  
  8.  *  dest_type [IN]  Charset type of destination  
  9.  *  src_buff  [IN]  Buffer stores source string  
  10.  *  dest_buff [OUT] Buffer stores destination string  
  11.  *  dest_size [IN]  Size of destination buffer (bytes)  
  12.  * RETURNS  
  13.  *  Length of destination string, including null terminator. (bytes)  
  14.  *****************************************************************************/  
  15. kal_int32 mmi_chset_convert(  
  16. mmi_chset_enum src_type,  
  17. mmi_chset_enum dest_type,  
  18. char *src_buff,  
  19. char *dest_buff,  
  20. kal_int32 dest_size); 

使用方式如下:

  1. mmi_chset_convert(MMI_CHSET_GB2312,MMI_CHSET_UCS2,(char * )soure_string,(char *)destion_string,source_size); 

小结:MTK系统中字符转换问题的内容介绍完了,希望通过本文的学习能对你有所帮助!

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我哥哥太爱我了怎么办 如果婚姻无法维持该怎么办 捡了一只流浪狗怎么办 微博加载不出来怎么办 我的脾气很暴躁怎么办 歌单恢复已删除怎么办 家里破产了我该怎么办 对付有心计的人怎么办 上嘴唇无故肿了怎么办 下嘴唇肿了一半怎么办 狗狗早上叫不停怎么办 狗在家乱咬东西怎么办 狗狗晚上一直叫怎么办 金毛幼犬晚上叫怎么办 金毛晚上老是叫怎么办 5岁宝宝总尿裤子怎么办 2岁宝宝尿裤子怎么办 2周岁宝宝尿裤子怎么办 5岁宝宝尿裤子怎么办 模拟人生4不怀孕怎么办 狗狗的毛打结怎么办 狗狗生病了不吃东西怎么办 给领导送礼不收怎么办 国外弃货,货代怎么办 不小心拜了阴庙怎么办 要考试了不想考怎么办? 刚怀孕喝了红酒怎么办 不知道该怎么办的成语 墙纸3年了有味道怎么办 本命佛不要了怎么办 本命佛不想戴了怎么办 刚养的猫怕人怎么办 吃了马蜂蛹过敏怎么办 三星s5边框掉漆怎么办 一楼厕所反味怎么办 左脸颊反复长痘怎么办 头条指数650以后怎么办 6s电池不耐用了怎么办 天刀邮箱满了怎么办 吃了降压药血压还高怎么办 后脖颈发际线低怎么办