首页 > 其他分享 >BUG: 传输的uicode码转汉字显示部分错误

BUG: 传输的uicode码转汉字显示部分错误

时间:2024-08-08 14:29:58浏览次数:8  
标签:codepoint uicode UTF unicode 码转 0x80 str BUG out

1.BUG描述

pc下发文本信息,采用unicode编码形式,下位机单元接收后,需要将其解码成utf-8的编码形式显示出来,但是发现文本首部和尾部出现乱码。

2.BUG原因

原因很简单,解码的时候尾部和首部没有对齐。记录这个BUG主要是记录下汉字的编码方法。

3.修复方法

解码时对齐即可。

4.unicode编码

统一码(Unicode),它也叫万国码、单一码。Unicode的最大好处。就是将世界上所有的文字用2个字节统一进行编码。

5.UTF-8

英文是UCS Transfer Format。UTF-8就是专门对Unicode这套理论标准的一种具体实现。UTF-8、UTF-16 和 UTF-32本质上只是出于空间和时间的权衡。
UTF-8最大的一个特征就是变长存储的编码方式。它可以使用1 ~ 4个字节去存储不同的字符,根据不同的字符选择最合适的字节长度去进行存储。相对来说最节省空间。

6.代码实现

点击查看代码
//unsigned int codepoint :这里必须是32位,因为utf-8最长占用4个字节
int unicode_to_utf8 (unsigned int codepoint, char *str)
{
 char out[4];
 if (codepoint < 0x80)
 {
   out[0] = (char)codepoint;
   strncpy (str, out, 1);
   return 1;
 }
 else if (codepoint < 0x800)
 {
   out[0] = 0xC0 | (codepoint >> 6);
   out[1] = 0x80 | (codepoint & 0x0000003F);
   strncpy (str, out, 2);
   return 2;
 }
 else if (codepoint < 0x10000)
 {
   out[0] = 0xE0 | (codepoint >> 12);
   out[1] = 0x80 | ((codepoint & 0x00000FFF) >> 6);
   out[2] = 0x80 | (codepoint & 0x0000003F);
   strncpy (str, out, 3);
   return 3;
 }
 else
 {
   out[0] = 0xF0 | (codepoint >> 18);
   out[1] = 0x80 | ((codepoint & 0x0003FFFF) >> 12);
   out[2] = 0x80 | ((codepoint & 0x00000FFF) >> 6);
   out[3] = 0x80 | (codepoint & 0x0000003F);
   strncpy (str, out, 4);
   return 4;
 }
 return 0; 
}

/*
*将pc下发的"你好",转换为utf-8码显示
*/
uint8_t *p_content = p_data+2;
uint8_t utf8_offset;
char str_src[300] = {0};
char *ptr_str = str_src;
unsigned int codepoint;
for(uint8_t i=0; i< ((*data_len )-2) / 2; i++)    //  "/2": because ever unicode use 2 byte;
{
  	codepoint = *p_content ++;
  	codepoint = codepoint << 8;
  	codepoint |= *p_content ++;
  	utf8_offset =  unicode_to_utf8(codepoint, ptr_str);
  	ptr_str = ptr_str+utf8_offset;
}
*(++ptr_str) = '\0';
dbg_printf ("font_color = %d, bg_color = %d, str:%s\n",font_color,bg_color, str_src);

可以看到你好的unicode码和utf-8码

标签:codepoint,uicode,UTF,unicode,码转,0x80,str,BUG,out
From: https://www.cnblogs.com/Charles-Hui/p/18348843

相关文章

  • Debug:调用MIG IP核
    MIGIP核功能:        MIGIP核主要用于帮助设计人员轻松地建立各种类型的存储器接口,包括DDR(DoubleDataRate)SDRAM(同步动态随机存取存储器)、DDR2、DDR3、DDR4等。问题描述        当我们遇到了如图所示的TheConfigurationPinPUDC_Bisusedforallthe......
  • 猫头虎分享 疑难杂Bug:CondaHTTPError: HTTP CONNECTION FAILED for url mirrors.tuna.
    ......
  • pytorch和deep learning技巧和bug解决方法短篇收集
    有一些几句话就可以说明白的观点或者解决的的问题,小虎单独收集到这里。torch.hub.loadhowdoesitwork下载预训练模型再载入,用程序下载链接可能失效。model=torch.hub.load('ultralytics/yolov5','yolov5s')model=torch.hub.load('ultralytics/yolov3','yolov3......
  • github技巧和bug解决方法短篇收集
    有一些几句话就可以说明白的观点或者解决的的问题,小虎单独收集到这里。Commits没有算入每天的activityfork的仓库是不算的。Commitsmadeinaforkwillnotcounttowardyourcontributions.参考:Contributionactivitynotshownforgithubpage移除已忽略的文件R......
  • 笠鬼bug的用法及注意事项是什么?小白也能懂!笠鬼风灵月影修改器快速启动三步秘籍
    在《笠鬼》这款游戏中,通常提到的“bug”是指游戏程序中的错误或漏洞,它们可能允许玩家以非预期的方式获得优势或绕过游戏的正常机制。然而,玩家通常不会主动“使用”bug,因为这样做可能违反游戏的服务条款,并可能导致账号被封禁。不过,从另一个角度来看,玩家可能会寻找或使用游戏修......
  • 记一次 Android 自定义相机拍照奔溃bug事件
    最近在开发一个美颜的相机功能,需要自定义抓取相机回调的数,生成照片并保存到相册,需要自定义保存照片。相机开始使用时没有任何问题,测试拍照几次后突然奔溃,跟踪代码日志发现是图片保存失败,同样的代码,同样的逻辑,正常使用很多次以后才奔溃报错,根据日志找到报错的位置,ContentValue......
  • Bugku -----Web-----全题目解析 (二) 超详细步骤
    ————————————————————分割线———————————————————— 6.矛盾这一行从URL查询字符串中获取名为num的参数值,并将其赋值给$num变量。如果URL中没有提供num参数,或者参数值不是有效的字符串,则$num将被设置为空或者默认值。......
  • 基于人工智能的代码分析与 Bug 检测实战
    简介在人工智能还未盛行的时候,检测Bug通常是通过以下几种方式完成:研发编写单元测试。代码扫描工具,SonarQube、findbugs。测试人员进行集成测试。而现在其中的一部分工作,都可以通过人工智能提升效率,辅助开发与测试发现更多的问题,降低成本和提高软件质量。对应流程相......
  • cmake引入第三方库的debug和release版本之Windows版本
    概述#本文将介绍cmak引入第三方库debug和release不同配置。Windows上,习惯将debug模式下生成的动态库名后缀添加D以作和release区分。cmake创建一个项目A,A引入动态库B,cmake怎么配置A链接动态库B的debug和release对应的库呢本文的教程是基于 这里,如果没有看,我推荐你先看......
  • Debug版本和Release版本对代码缺陷的影响分析
    1.问题背景    在代码开发的过程中,曾遇到过如下问题:程序在Debug版本下可以正常运行,但切换为Release版本后,就会出现崩溃。通过在代码中添加打印信息,最后将异常定位为一个数组的下标出现了超出界限的数值,从而引发了段错误。除上述问题外,在日常开发工作中也有一些同事反馈过,......