2022 LiteOS组件尝鲜—玩转Libiconv

举报
W922 发表于 2022/03/25 16:28:03 2022/03/25
【摘要】 ​概 述  随着互联网时代的发展,通过互联网进行文字交流的情况逐渐普遍,但在浏览一些外国网站获取信息时,通常需要进行字符编码的转换。那么问题来了,如果该字符在某一编码方式里没有该怎么办?为了解决这种混乱,Unicode编码方式诞生。Unicode是一种超级编码方式,包含了所有编码的字符集,因此一些新的文本格式类似XML的默认编码方式就是Unicode。  但是一些老式计算机还在沿用传统的字符...


概 述


  随着互联网时代的发展,通过互联网进行文字交流的情况逐渐普遍,但在浏览一些外国网站获取信息时,通常需要进行字符编码的转换。那么问题来了,如果该字符在某一编码方式里没有该怎么办?为了解决这种混乱,Unicode编码方式诞生。Unicode是一种超级编码方式,包含了所有编码的字符集,因此一些新的文本格式类似XML的默认编码方式就是Unicode。

  但是一些老式计算机还在沿用传统的字符编码方式,一些程序例如邮件程序和浏览器必须能够在这些不同的用户编码之间做转换,而一些程序虽然内置支持Unicode,但是仍然有在Unicode和其他的传统编码之间转换的需求,libiconv就是为这两种应用设计的编码转换库。 

   libiconv是一个开源的字符集转换库,可以在已知的字符集之间相互转换。详情参考: https://github.com/winlibs/libiconv

  LiteOS中提供了IconvDemoTask来演示如何使用Iconv组件。根据iconv所需资源,暂时只支持在以下开发板上运行IconvDemoTask

  STM32F429

  STM32F407

  STM32F769

  realview-pbx-a9

  qemu-virt-a53


解析Iconv Demo


  在iconv_demo.c中实现了下列内容:CodeConvert()通过调用libiconv库中的iconv_open()函数,生成用于字符转换的标识结构体cd,然后作为入参传入iconv()函数中,函数内依照标识cd和传入的数据的进行字符转换,保存到输出数据中。iconv_demo.c中分别实现了对GB18030,GBK,GB2312的字符和utf-8的字符进行相互转换。cp tools/build/config/Cloud_STM32F429IGTx_FIRE.config .config。



使能Iconv Demo

   1.在LiteOS源码根目录下根据实际使用的开发板,拷贝tools/build/config/目录下的默认配置文件${platform}.config到根目录,并重命名为.config。以STM32F429为例,执行 cp tools/build/config/Cloud_STM32F429IGTx_FIRE.config .config。

    2.在LiteOS源码根目录下执行make menuconfig命令,按如下菜单路径使能Iconv组件和Iconv Demo。

        Components -->     

Utility  --->

             [*] Enable Iconv    

 Demos  --->      

Utility Demo  --->

            [*] Enable Iconv Demo


  保存退出后,LiteOS会从github上自动下载libiconv源代码,并从gitee上下载适配于LiteOS系统的patch包,并打入patch。详细流程在components/download.sh文件中。注意: 下载需要Linux主机可以访问互联网,并安装git



编译运行Iconv Demo


  在LiteOS源码根目录下执行make clean; make -j命令编译LiteOS工程,编译成功后会在out/Cloud_STM32F429IGTx_FIRE/lib路径下生成libiconv.alibiconv_demo.a文件,并生成系统镜像文件Huawei_LiteOS.bin。注意: 选择不同开发板生成的镜像路径会有不同。

烧录系统镜像文件到开发板中可以看到如下运行结果。

********Hello Huawei LiteOS********

LiteOS Kernel Version : 5.0.0
build data : Mar 13 2021 01:26:38

**********************************
osAppInit
cpu 0 entering scheduler
app init!
Hello, welcome to liteos demo!
Iconv demo task start to run.
unicode -> gb2312 : 姝e湪瀹夎 -> 正在安装
gb2312  -> unicode: 正在安装 -> 姝e湪瀹夎
unicode -> gdk    : 姝e湪瀹夎 -> 正在安装
gdk     -> unicode: 正在安装 -> 姝e湪瀹夎
unicode -> gb18030: 姝e湪瀹夎 -> 正在安装
gb18030 -> unicode: 正在安装 -> 姝e湪瀹夎
Iconv demo task finished.

Huawei LiteOS #


结 语


未来我们还会持续新增更多组件、开发板、架构、特性等。

感谢您的阅读,有任何问题、建议,都可以留言给我们,让我们一起进步: https://gitee.com/LiteOS/LiteOS/issues

为了更容易找到“LiteOS”代码仓,建议访问https://gitee.com/LiteOS/LiteOS,关注“ Watch”、点赞“Star”、并“Fork”到自己账号下,如下图。


- end -






【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。