UTF-8编码,转码汉字的实现总结,以及QT‘

首先需要了解什么是unicode

unicode是一种字符集,它包含了世界上几乎所有的字符的标准集合。每一个字符都有与之对应的编码。

unicode编码就是,unicode字符集中字符对应的码号。通常用16进制表示;

eg:

汉字:飞 

对应的unicode编码:98DE      (16进制)

1001  1000  1101  1110

UTF-8是什么 

UTF8是一种针对unicode字符集设计的可变长度字符编码方案。

UTF8对应汉字的编码格式一般占用3或4个字节,大部分是3个字节

eg:

汉字:飞

对应的UTF-8编码:e9a39e

1110 1001 1010 0011 1001 1110

对应的UTF-8编码格式: \xe9\xa3\x9e

既然说UTF8是unicode字符集大的一种编码方案 那么如何通过UTF8编码查找对应的unicode编码从而获取对应的符号(汉字)

1. **识别字节顺序和长度**:
   - 对于UTF-8编码,每个字符根据其Unicode码点范围使用不同数量的字节进行编码。
     - 单字节:U+0000至U+007F,编码为`0xxxxxxx`
     - 双字节:U+0080至U+07FF,编码为`110xxxxx 10xxxxxx`
     - 三字节:U+0800至U+FFFF,编码为`1110xxxx 10xxxxxx 10xxxxxx`
     - 四字节:U+10000至U+10FFFF,编码为`11110xxx 10xxxxxx 10xxxxxx 10xxxxxx`

2. **解码过程**:
   - 遍历UTF-8字符串的每个字节。
   - 根据首位的1的数量确定后续字节的数量和模式。
   - 分别从每个字节中提取有效位并拼接起来,形成最终的Unicode码点

eg:

  • UTF-8编码1110 1001 1010 0011 1001 1110  将1.中的xx取出来得到 1001 1000 1101 1110就是对应unicode编码

代码中碰到的具体问题

        wifi模块中将wifi中的ssid已char[]数组存起来,char[]数组中的内容是“\\xe9\\xa3\\x9e”

char ssid[200] = "\\xe9\\xa3\\x9e"

        如何将他转换成“飞”存到QString中去

       1. 先使用QString::fromLocal8Bit函数,将字符串以字节为单位转换成对应的字符串

QString str_ssid = QString::fromutf8(ssid);//str_ssid中包含的字符就是“\xe9\xa3\x9e”,注意这里的\是包含在里面的字符而不是分隔符

        2.现在需要对字符串 “\xe9\xa3\x9e”进行处理 变成““e9a39e””,用16进制的格式存到分别存到3个字节中,这样才能识别出中文来

        以下是实现的函数

QString process(QString strResStr)
{
    //strResStr中存放的是\xe9\xa3\x9e
    QString str_temp;
    for(int i = 0 ; i <strResStr.length;)
    {
        if(strResStr.at(i) == "\\")  //如果当前位置为\
        {
            if((i+1) < strResStr.length() && strResStr.at(i+1) == '\\') //连续两个\一般不会进入
            {
               //这里做的操作就是将两个连续的\替换为1个\
                str_stemp.append(strResStr.at(i))   // 将一个\加到字符串里
                i+=2;
            }
            else if((i+1) < strResStr.length() &&  strResStr.at(i+1) != 'x')
            {
                //说明轮到英文了 ,就contine添加英文
                ++i;
                contine;;
            }
            else
            {    //处理中文utf-8
                QString str = strResStr.mid(i+2,i+4);
                strResStr.append(str.mid(0,2).toUShort(0,16))//将获得的字符以16进制的形式存到代码中
                i+=4;
            }
        }
        else
        {
            //添加英文或数字这种不是多字节编码格式的字符
            str_temp.append(strResStr.at(i));
            i++;
        }
    }
    //str_temp 中存放的是e9a39e
    QByteArry latin1 = str_temp.toLatin1();
    
    //这时候p里面存着的就是真正的值
    char* p = latin1.data();

    //然后通过编码转换将他转换成中文格式并且返回出去
    return QString::fromUtf8(p);
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/572769.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电表抄表系统:现代能源管理的革新

1.界定和功能 电表抄表系统是一种前沿的自动化控制&#xff0c;用以远程控制搜集、解决与分析电表数据。它取代了传统的人工抄水表方法&#xff0c;提高了效率&#xff0c;降低了不正确&#xff0c;并且为供电公司带来了实时能源消耗信息。系统软件的主要作用包含全自动载入电…

大模型实战—通义千问大模型微调

通义千问大模型微调 在之前的文章中&#xff0c;我分享了一些使用大语言模型开发应用的方法&#xff0c;也介绍了几个开源大语言模型的部署方式&#xff0c; 有同学给我留言说想知道怎么训练自己的大语言模型&#xff0c;让它更贴合自己的业务场景。完整的大语言模型训练成本…

第十五届蓝桥杯省赛第二场PythonB组A题【进制】题解(AC)

解题思路 按照题意进行模拟&#xff0c;计算 x x x 的 b b b 进制过程中&#xff0c;若出现余数大于 9 9 9&#xff0c;则说明 x x x 的 b b b 进制一定要用字母进行表示。 x 8100178706957568def check(x, b):while x:if x % b > 10:return Falsex // breturn True…

Flink的安装、项目创建、任务打包和部署完整实现,任务实现使用JAVA语言

Flink资源下载地址 Flink安装包下载地址 一、本地模式安装Flink 1、在Linux服务上&#xff0c;创建flink文件夹 mkdir flink 2、上传文件并解压 tar -zxvf flink-1.14.6-bin-scala_2.11.tgz 解压完成后&#xff0c;如图&#xff1a; 3、启动Flink 进入到解压目录下&#x…

男士休闲裤比较好的品牌有哪些?高品质休闲男装推荐

穿衣服最重要的并不是要求多好看多时尚&#xff0c;相信绝大部分年纪在23岁以上的男同胞们更希望穿一些简约好搭配的款式&#xff0c;更重要的其实就是要求质量耐穿&#xff0c;以及有足够好的舒适性。 但是现在市面上的品牌实在是太多了&#xff0c;而且质量也参差不齐&#x…

【保姆级讲解下gateway基本配置】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

pwn--realloc [CISCN 2019东南]PWN5

首先学习一下realloc这个函数&#xff0c;以下是文心一言的解释&#xff1a; realloc是C语言库函数之一&#xff0c;用于重新分配内存空间。它的主要功能是调整一块内存空间的大小。当需要增加内存空间时&#xff0c;realloc会分配一个新的更大的内存块&#xff0c;然后将原内…

QT从入门到实战x篇_22_番外1_Qt事件系统

文章目录 1. Qt事件系统简介1.1 事件的来源和传递1.2 事件循环和事件分发1.2.1 QT消息/事件循环机制1.2.1.1 机制解释1.2.1.2 两个问题 1.2.2 事件分发 2. 事件过滤基础2.1 什么是事件过滤器&#xff08;Event Filter&#xff09;&#xff1f;2.2 如何安装事件过滤器 3. 事件过…

《QT实用小工具·四十》显示帧率的控件

1、概述 源码放在文章末尾 该项目实现了可以显示帧率的控件&#xff0c;项目demo演示如下所示&#xff1a; 、 项目部分代码如下所示&#xff1a; #ifndef FPSITEM_H #define FPSITEM_H#include <QQuickItem>class FpsItem : public QQuickItem {Q_OBJECTQ_PROPERTY(i…

制作自己的YOLOv8数据集

制作自己的YOLO8数据集 前言 该数据集的格式参照于coco数据集结构✨ 步骤一&#xff1a;收集图像数据 从互联网上下载公开的数据集&#xff0c;也可以使用摄像头或其他设备自行采集图像&#xff0c;确保你的图像数据覆盖了你感兴趣的目标和场景 步骤二&#xff1a;安装Labe…

提升工作效率必备,桌面待办事项提醒软件

在快节奏的现代社会&#xff0c;提升工作效率成为众多上班族的共同追求。有效的时间管理、合理的工作计划和正确的工具选择&#xff0c;是实现高效工作的三大关键。尤其是选择一款优秀的待办事项管理软件&#xff0c;能够极大地助力我们提升工作效率。 而我在网上找到了一款提…

11 - 在k8s官方文档上,经常搜索不到内容的问题

使用k8s官方文档时&#xff0c;会出现首页可以正常打开&#xff0c;但是输入搜索关键字之后&#xff0c;搜索不到内容的情况&#xff0c;如下图&#xff1a; 这是由于相关搜索组件被墙的原因&#xff0c;处理方法如下&#xff1a; 谷歌浏览器&#xff1a; 火狐浏览器&#x…

AI大模型重塑新媒体变现格局:智能写作技术助力腾飞!

文章目录 一、AI大模型&#xff1a;新媒体变革的引擎二、智能写作&#xff1a;内容生产的新范式三、精准推送&#xff1a;增强用户粘性的关键四、新媒体变现&#xff1a;插上AI翅膀的飞跃五、挑战与机遇并存&#xff1a;AI与新媒体的未来展望AI智能写作: 巧用AI大模型让新媒体变…

智慧园区引领未来产业趋势:科技创新驱动园区发展,构建智慧化产业新体系

目录 一、引言 二、智慧园区引领未来产业趋势 1、产业集聚与协同发展 2、智能化生产与服务 3、绿色可持续发展 三、科技创新驱动园区发展 1、创新资源的集聚与整合 2、创新成果的转化与应用 3、创新文化的培育与弘扬 四、构建智慧化产业新体系 1、优化产业布局与结构…

鸿蒙OpenHarmony【集成三方SDK】 (基于Hi3861开发板)

OpenHarmony致力于打造一套更加开放完善的IoT生态系统&#xff0c;为此OpenHarmony规划了一组目录&#xff0c;用于将各厂商的SDK集成到OpenHarmony中。本文档基于Hi3861开发板&#xff0c;向平台开发者介绍将SDK集成到OpenHarmony的方法。 规划目录结构 三方SDK通常由静态库…

C语言联合体详解

下午好诶&#xff0c;今天小眼神给大家带来一篇C语言联合体详解的文章~ 目录 联合体 1. 联合体类型的声明 2. 联合体的特点 代码一&#xff1a; 代码二&#xff1a; 3. 相同成员的结构体和联合体对比 ​编辑4. 联合体大小的计算 5. 联合体的优点 联合体 1. 联合体…

干货:html中的标签属性大全25个,收藏起来吧。

<meta> 元素是 HTML 中的一个标签&#xff0c;用于提供关于文档的元数据信息。它通常位于 <head> 标中&#xff0c;不会直接在页面上显示内容&#xff0c;而是用于告诉浏览器和搜索引擎一些关于页面的信息。 <meta charset"字符编码">&#xff1a;…

【算法入门-Python】02_递归

一、递归 递归的两个特点&#xff1a;调用自身&#xff1b;结束条件。 def func1(x):print(x)func1(x-1)没有结束条件&#xff0c;si递归。不是递归。 def func2(x)&#xff1a;if x > 0:print(x)func2(x1)递归调用的x1&#xff0c;没有结束条件。不是递归 def func3(x)…

【保姆级教程】Windows 远程登陆 Linux 服务器的两种方式:SSH + VS Code,开发必备

0. 前言 很多情况下代码开发需要依赖 Linux 系统&#xff0c;远程连接 Linux 服务器进行开发和维护已成为一种常态。对于使用Windows系统的开发者来说&#xff0c;掌握如何通过 SSH 安全地连接到 Linux 服务器&#xff0c;并利用 VS Code 编辑器进行开发&#xff0c;是一项必备…

Unix 进程基本信息

目录 一、程序执行流程二、进程的执行状态三、进程信息记录3.1 proc结构体3.2 user结构体 四、内存分配4.1 代码段代码段如何管理&#xff1f;4.2 数据段4.3 虚拟地址空间4.4 交换地址APR构成APR数量APR切换 内容来源&#xff1a;《Unix内核源码剖析》 一、程序执行流程 为程序…