stm32 utf8转unicode gb2312,通过ec20功放播放语音

该博客介绍了如何在STM32设备上处理UTF8编码的字符串,将其转换为Unicode以便于通过EC600通信模块播放。内容包括UTF8转Unicode的代码实现,以及Unicode到GBK的转换,通过查表快速完成转换。示例代码展示了从UTF8到GBK的完整流程。

stm32 utf8转unicode gb2312


由于我需要通过json接收平台下发 的文字,通过移远电子EC600 ec20 模块播放。
但是由于平台下发的是UTF8格式,EC600 通信模块只执行 unicode或者gbk,所以需要转化一下。

首先将utf8转为unicode,这时候将内容处理可以直接给模块使用
比如平台下发 “1响严严”
utf8内容为 “\x31\xE5\x93\x8D\xE4\xB8\xA5\xE4\xB8\xA5”
在这里插入图片描述
unicode 格式为 “003154CD4E254E25”(16进制)

AT+QTTS=1,“003154CD4E254E25” 这时候其实可以播放,当然也可以继续转为GBK,需要查表字库,字库大小40k左右

1、将Utf8 – Unicode

/**
 * @brief utf8编码转unicode字符集(usc4),最大支持4字节utf8编码,(4字节以上在中日韩文中为生僻字)
 * @param *utf8 utf8变长编码字节集1~4个字节
 * @param *unicode utf8编码转unicode字符集结果,最大4个字节,返回的字节序与utf8编码序一致
 * @return length 0:utf8解码异常,others:本次utf8编码长度
 */

#define PARSE_ERROR -1
uint8_t UTF8ToUnicode(uint8_t* utf8, uint32_t* unicode) {
   
   
    const uint8_t lut_size = 3;
    const uint8_t length_lut[] = {
   
    2, 3, 4 };
    const uint8_t range_lut[] = {
   
    0xE0, 0xF0, 0xF8 };
    const uint8_t mask_lut[] = {
   
    0x1F, 0x0F, 0x07 };

    uint8_t length = 0;
    uint8_t b = *(utf8 + 0);
    uint32_t i = 0;

    if (utf8 == NULL) {
   
   
  
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值