六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 663|回复: 0

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

[复制链接]

升级  78.6%

856

主题

856

主题

856

主题

探花

Rank: 6Rank: 6

积分
2572
 楼主| 发表于 2013-2-4 12:16:34 | 显示全部楼层 |阅读模式
MTK系统中字符转换问题是本文要介绍的内容,主要是来了解并学习MTK中一些小案例的应用,具体内容来看本文详解。如果我不想在ref_list.txt文件中加入我们的字符串字符,那么我们是否可以直接在代码里定义字符串呢?例如中文字符串,因为在代码里定义的中文字符串都是GB码的,而MTK系统对于字符函数API都只接受UNICODE编码的。
我们可以通过文件conversion.c文件中的函数mmi_chset_text_to_ucs2(.... )函数对GB编码的字符串进行转换;但是使用该函数是必须将宏__MMI_CHSET_GB2312__打开,否则转换后必定显示乱码;为什么会这样呢?我们看入下代码片断:
在conversion.c中的头部有如下代码片断:

  • #if defined(__MMI_CHSET_BIG5__)  
  • mmi_chset_enum g_chset_text_encoding = MMI_CHSET_BIG5;  
  • #elif defined(__MMI_CHSET_GB2312__)  
  • mmi_chset_enum g_chset_text_encoding = MMI_CHSET_GB2312;  
  • #else   
  • mmi_chset_enum g_chset_text_encoding = MMI_CHSET_UTF8;  
  • #endif  
由此可见,如果我们不打开__MMI_CHSET_GB2312__宏,g_chset_text_encoding 就是不是MMI_CHSET_GB2312 值;而是其它值,则函数mmi_chset_text_to_ucs2(....)就不能对GB编码的字符串进行转换。
mmi_chset_text_to_ucs2(....)函数片断:

  • kal_int32 mmi_chset_text_to_ucs2(kal_uint8 *dest, kal_int32 dest_size, kal_uint8 *src)  
  • {  
  • /*----------------------------------------------------------------*/  
  • /* Local Variables*/  
  • /*----------------------------------------------------------------*/  
  • /*----------------------------------------------------------------*/  
  • /* Code Body*/  
  • /*----------------------------------------------------------------*/  
  • 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中的片断。

  • #if defined(CFG_MMI_CHSET_GB2312) && (CFG_MMI_CHSET_GB2312 == __ON__) || \  
  • (defined(__MMI_LANG_CHSET_DEPENDENCE__) && defined(__MMI_LANG_SM_CHINESE__))  
  • #ifndef __MMI_CHSET_GB2312__  
  • #define __MMI_CHSET_GB2312__  
  • #endif  
  • #endif
那么宏CFG_MMI_CHSET_GB2312又在哪里呢?????
我们看看文件MMI_features_switch.h代码片断如下:

  • /*  
  •   Description: Turn on simple Chinese GB2312 charset  
  •   Option: [__ON__, __OFF__, __AUTO__]  
  •   Reference: SOP_Add_New_Charset_Conversion.doc  
  • */  

  • #define CFG_MMI_CHSET_GB2312 (__AUTO__)
[疑问]在配置文件MMI_features_type.h中有如下定义

  • /* general on/off/auto type */  
  • #define __ON__ (-1)  
  • #define __OFF__(-2)  
  • #define __AUTO__  (-3)
其中__AUTO__ 不知道是什么意思??????
当然如果__MMI_CHSET_GB2312__没有被Enable,我们可以直接使用函数mmi_chset_convert()
该函数原形如下所示:

  • /*****************************************************************************  
  • * FUNCTION  
  • *  mmi_chset_convert  
  • * DESCRIPTION  
  • *  Convert string between 2 character sets. (will add the terminate character)  
  • * PARAMETERS  
  • *  src_type  [IN]  Charset type of source  
  • *  dest_type [IN]  Charset type of destination  
  • *  src_buff  [IN]  Buffer stores source string  
  • *  dest_buff [OUT] Buffer stores destination string  
  • *  dest_size [IN]  Size of destination buffer (bytes)  
  • * RETURNS  
  • *  Length of destination string, including null terminator. (bytes)  
  • *****************************************************************************/  
  • kal_int32 mmi_chset_convert(  
  • mmi_chset_enum src_type,  
  • mmi_chset_enum dest_type,  
  • char *src_buff,  
  • char *dest_buff,  
  • kal_int32 dest_size);
使用方式如下:

  • mmi_chset_convert(MMI_CHSET_GB2312,MMI_CHSET_UCS2,(char * )soure_string,(char *)destion_string,source_size);
小结:MTK系统中字符转换问题的内容介绍完了,希望通过本文的学习能对你有所帮助!
【编辑推荐】
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表