详解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);
  10. }

问题是我们如何打开宏__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. #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系统中字符转换问题的内容介绍完了,希望通过本文的学习能对你有所帮助!

详解MTK系统中字符转换问题相关推荐

  1. find linux 目录深度_浪里淘沙,详解Linux系统中Find命令的实用技巧

    知了小巷:浪里淘沙,详解Linux系统中Find命令的实用技巧. 啊哈,找到了! 当我们需要在Linux系统上定位某个文件或目录时,find命令通常是必备之选. 它使用起来非常简单,但有许多不同的可选 ...

  2. php执行md5sum,Linux_详解Linux系统中md5sum命令的用法,MD5算法常常被用来验证网络文 - phpStudy...

    详解Linux系统中md5sum命令的用法 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任 ...

  3. php ping icmp,Linux_详解Linux系统中ping和arping命令的用法,pingping 程序使用 ICMP 协议的强 - phpStudy...

    详解Linux系统中ping和arping命令的用法 pingping 程序使用 ICMP 协议的强制回显请求数据报以使主机或网关发送一份 ICMP 的回显应答.回显请求数据报(" ping ...

  4. linux管道命令详解,Linux系统中的管道命令的用法详解

    Linux系统中管道命令是linux系统的一个强大之处.下面由学习啦小编为大家整理了Linux系统中的管道命令的用法详解的相关知识,希望对大家有帮助! Linux系统中的管道命令的用法详解 管道命令操 ...

  5. centos 卸载软件_一篇看懂!详解-Linux系统中安装软件的三种方法

    Linux系统中安装软件的三种方法 注:本文主要以CentOS为例介绍常用的安装方式,其他版本linux在文章底部 Linux系统中怎么安装软件,首先说一下应用程序与系统命令的区别: 1.文件位置 系 ...

  6. linux所请求的操作需要超级用户权限,详解Linux系统中的root权限控制

    在Linux操作系统中,root的权限是最高的,也被称为超级权限的拥有者.普通用户无法执行的操作,root用户都能完成,所以也被称之为超级管理用户. 在系统中,每个文件.目录和进程,都归属于某一个用户 ...

  7. linux info文件夹,详解Linux系统中查询文档的man和info命令

    manUsage: man [OPTION...] [章节] 手册页... -C, --config-file=文件   使用该用户设置文件 -d, --debug                输出 ...

  8. 安卓编译android.mk,详解安卓系统中的Android.mk文件

    概述    Android.mk文件用来向编译系统描述如何编译你的源代码.更确切地说,该文件其实就是一个小型的Makefile.由于该文件会被NDK的编译工具解析多次,因此应该尽量减少源码中声明变量, ...

  9. linux ps-l命令详解,Linux系统中ps -l命令显示的英文含义

    Linux系统中ps -l命令显示的英文含义 UID:启动这些进程的用户. PID:进程的进程ID. PPID:父进程的进程号(如果该进程是由另一个进程启动的). C:进程生命周期中的CPU利用率. ...

最新文章

  1. 解题报告(二)多项式问题(多项式乘法及其各种运算)(ACM/ OI)超高质量题解
  2. Linux生产环境CPU占用过高排查步骤
  3. 一个弹窗口的流氓软件
  4. SpringBoot实现定时任务
  5. git stash命令的用法
  6. 作者:司光亚(1967-),男,国防大学信息作战与指挥训练教研部教授,主要研究方向为战争复杂系统建模仿真。...
  7. mysql-5.1.50中文_mysql5.1 中文 乱码 mysql 5.1 中文字符集问题终极解决方案
  8. 使用Chrome保存网页为mht文件
  9. 部署一个Windows Server 2008 的只读域控制器
  10. CISA:警惕俄罗斯 “Sandworm” 黑客组织使用的新型恶意软件框架
  11. 测试面试题,自动化测试与性能测试篇(附答案)
  12. 三个关于“契约精神”的故事(转)
  13. 基于AE+C#读取文件及图层输出
  14. 西门子s1200教程_西门子S-1200入门PLC视频教程百度云资源下载
  15. 触屏查看大图(可以缩放)
  16. 各种提权、渗透经验技巧总结大全(下)
  17. pandox怎么用_神器Pandoc的安装与使用 | Flyaway's Blog
  18. win下装django
  19. 初识华为MDC智能驾驶计算平台
  20. Linux个人机器使用465发送邮件

热门文章

  1. java 重建二叉树_【剑指offer】 Java实现重建二叉树
  2. 计算机二级考试需要怎么备考,计算机二级ms office应该怎么备考 考试内容是什么...
  3. android jar 反射,android 第三方jar库 反射得到自己的资源ID
  4. matlab 回退到上一行,对乒乓球回滚的分析与MATLAB模拟
  5. super在python3和python2_Python扩展与 – 使用super()python 3 vs python 2
  6. builtins自定义_ng-repeat里创建的自定义指令
  7. c++游戏代码坦克大作战_一红一蓝多种模式的双人小游戏:红蓝大作战
  8. Leetcode 2 两数相加 Python
  9. TensorFlow学习笔记(1):variable与get_variable, name_scope()和variable_scope()
  10. volatile的作用