随记unicode解码问题

MCU收到视屏终端的225报文时解析终端名称汉文出错,直接解析为\uXXXX的字符串,其实是因为mcu网络代理进程采用java栈后,发到后台的名字采用json的unicode编码,linux不能识别\u转义符,而将其解析为 \ 和 u 两个字符,于是自己手动转换

  wchar_t wstr;
                        int k=0;
                        char strbuf_tmp[kCallMaxAddrLen] = { 0 };
                        char * ptr=strbuf_tmp;
                        setlocale(LC_ALL, "zh_CN.utf8");

                        unsigned char chs[4]="";
                        for (int i = 0; i < displayLen; )
                        {
                                if(0x5c==strbuf[i]&&0x75==strbuf[i+1])
                                {
                                        i+=2;
                                        for(int j=0;j<4;j++)
                                        {
                                                if(strbuf[i+j]<='9'&&strbuf[i+j]>='0')
                                                        chs[j]=(strbuf[i+j]-48);
                                                else
                                                        chs[j]=(strbuf[i+j]-87);
                                        }
                                        i+=4;
                                        wstr=chs[0]<<12 | chs[1]<<8 | chs[2]<<4 | chs[3];
                                        ptr+=wctomb(ptr,wstr);
                                }
                                else
                                {
                                        *ptr=strbuf[i];
                                        ++ptr;
                                        ++i;
                                }
                        }

写的比较丑,用wctomb是考虑了中文和数字字母混合名称的处理,这里主要记一下 setlocale(LC_ALL, "zh_CN.utf8")这个函数,linux下locale命令可以查看系统支持的语言库,要是系统没有该字体,会返回错误,记得先确认好系统是否有你设置的字库,不然发现后空余懊恼

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值