MTK使用ref_list.txt文件统一加载字符进行统一的转换
将GB码转换成UNICODE编码,因为MTK系统对于字符函数API都只接受UNICODE编码!
以下我想介绍两种直接输出GB码的方式!
方式一:
我们可以通过文件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中的片断。
/* 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内部API
其中还有方式二:
直接将要显示的字符转换为UCS2码就可以显示了;需要小工具可找我索取!!!
ps:
将以下写入txt文件,保存成html,使用浏览器打开即可!
<script type="text/javascript">
document.write(unescape("%u738B%u5FC5%u8D85"));
</script>