win32相关(字符编码)

news2025/5/18 18:42:06

字符编码


ASCII编码

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是最基础的字符编码标准,用于在计算机和其他设备中表示文本

基本概念

  1. 7位编码: ASCII使用7位二进制数(共128个编码点,0-127)来表示字符
  2. 标准ASCII: 0-127的编码范围
  3. 扩展ASCII: 一些系统使用第8位(共256个编码点),但这不属于标准ASCII

在这里插入图片描述
我们新建一个记事输入ABab,保存编码为ASCII编码格式,再用一个二进制文本查看器打开
在这里插入图片描述
可以看到大写的A对应ASCII编码中的41,B对应42,小写的a对应62,大写61(这里的都是十六进制,编码表上的是十进制

存储方式

在ASCIi编码中计算机中存储一个字符占一个字节,但标准的ASCII码表只有128个字符,即 0 - 7F
后面的 80 - FF 就是扩展ASCII编码


GB2312编码

与ASCII的关系

  1. 兼容ASCII: 单字节的ASCII字符(0x00-0x7F)在GB2312中保持不变
  2. 区分规则:
    当字节值>0x7F时,与后续字节组合成双字节中文字符
    因此GB2312编码的文本中,ASCII字符和中文可以混用

改变之前记事本中的内容,输入中文保存为ASCII编码用二进制文本工具打开
在这里插入图片描述
可以看到中文被转为二进制编码时,中为:0xD0D6 文为:0xC4CE 由两个1字节拼凑出来一个中文字符,单个字节编码也都在ASCII(扩展)编码范围内


UNICODE编码

Unicode 是一个国际标准,旨在为世界上所有书写系统的每个字符提供一个唯一的数字标识(称为码点/Code Point),解决了
传统编码(如ASCII、GB2312等)的局限性

核心概念

  1. 码点(Code Point):
    • 每个字符被分配一个唯一的数字编号
    • 表示形式:U+前缀+十六进制数字(如U+4E2D表示"中")
    • 范围:U+0000U+10FFFF(共1,114,112个码位)
  2. 编码平面:
    • 基本多文种平面(BMP): U+0000-U+FFFF(最常用字符)
    • 辅助平面: U+10000-U+10FFFF(emoji、罕见汉字等)

如何存储UNICODE

UTF-16 & UTF-8

UNICODE规定了符号是什么, UTF-16或UTF-8则规定了如何储存

UTF-16

在这里插入图片描述
在UTF-16的格式下保存,可以看到每个字符占2个字节,那0xFEFF又是什么呢?(UTF-16的存储格式下,一个存储单元占2个字节,如果一个存储单元存不下就再加一个存储单元)

前面的FFFE是什么?

BOM(Byte Order Mark)
UTF-8 | EF BB BF
UTF-16LE | FF FE
UTF-16BE | FE FF

用来表示是以什么格式来存储Unicode编码字符


UTF-8(变长存储方式)

在这里插入图片描述

既然已经有了UTF-16那为什么还要加一个UTF-8呢?

那是因为在网络传输中,原本一个字节就能表示的编码,使用UTF-16后,需要2个字节来表示,极大的降低了网格的传输速率
(如果一个字节能够存储那就使用1个字节,如果两个字节能存储就2个字节来存储,不行就3个字节…)

优点: 节省空间
缺点: 解析麻烦

解析方式

Unicode编码(16进制) UTF-8二进制编码
000000 - 00007F | 0xxxxxxxx
000080 - 0007FF | 110xxxxx 10xxxxxx
000800 - 007FFF | 1110xxxx 10xxxxxx 10xxxxxx
001000 - 10FFFF | 11110xxx 10xxxxxx 10xxxxxx

在这里插入图片描述

我们来解析一下上面的A文,可以看到”A“在编码表中为0x41,在000000 - 00007F这个范围中,所以采用直接编码的方式,存储为1个字节,再来看下“文”,在编码表中的范围在000800 - 007FFF这个范围中,所以编码为0xE69687

我们把0x8796E6转为二进制看下是不是按上面的范围来解析的
1110 (0110) 10(01 0110) 10(00 0111) => 1110xxxx 10xxxxxx 10xxxxxx

真正有效的是括号里括起来的
011001 011000 0111 转为十六进制后为:0x6578 ,大家可以回到上面看下utf-16下,文在utf-16下的十六进制是什么,正是0x6578(这个0x6578就是在Unicode,utf-16编码下的唯一编码)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Langfuse和RAGAS,搭建高可靠RAG应用

大家好,在人工智能领域,RAG系统融合了检索方法与生成式AI模型,相比纯大语言模型,提升了准确性、减少幻觉且更具可审计性。不过,在实际应用中,当建好RAG系统投入使用时,如何判断接收信息是否正确…

android studio导入项目

如果 gradle-8.0-bin.zip 没有下载成功 可以点击进入这个网站:https://services.gradle.org/distributions/ 找到和自己本版相同的gradle-8.0-bin.zip文件找到自己版本进行下载; 如果下载依赖失败, 可以手动下载依赖编译过程中的jar https://repo.maven.apache.org/…

Autosar Nvm下电存储实现方式-基于ETAS工具

文章目录 前言Autosar Nvm相关定义Nvm Ram Block States状态切换Nvm_WriteAll函数NvBlock配置生成代码分析及使用总结前言 Nvm中存储的数据,一般有两种存储方式,一个是立即存,一个是下电存,之前介绍过立即存的配置,本文介绍下电存的配置及实现 Autosar Nvm相关定义 Nvm…

c# 数据结构 树篇 入门树与二叉树的一切

事先声明,本文不适合对数据结构完全不懂的小白 请至少学会链表再阅读 c# 数据结构 链表篇 有关单链表的一切_c# 链表-CSDN博客 数据结构理论先导:《数据结构(C 语言描述)》也许是全站最良心最通俗易懂最好看的数据结构课(最迟每周五更新~~&am…

Python Bug 修复案例分析:asyncio 事件循环异常引发的程序崩溃 两种修复方法

在 Python 异步编程的工作中,asyncio库为我们提供了高效处理并发任务的强大工具。然而,asyncio在使用过程中也可能因为一些细节处理不当而引发 Bug。下面,我们就来深入分析一个因asyncio事件循环异常导致程序崩溃的典型案例。兴趣的友友可以借…

题单:递归求和

宣布一个重要的事情,我的洛谷有个号叫 题目描述 给一个数组 a:a[0],a[1],...,a[n−1]a:a[0],a[1],...,a[n−1] 请用递归的方式出数组的所有数之和。 提示:递推方程 f(x)f(x−1)a[x]f(x)f(x−1)a[x]; 输入格式 第一行一个正整数 n (n≤100)n (n≤100)…

怎么在excel单元格1-5行中在原来内容前面加上固定一个字?

环境: WPS 2024 问题描述: 怎么在excel单元格1-5行中在原来内容前面加上固定一个字? 解决方案: 1.在Excel中,如果您想在单元格的内容前面添加一个固定的字,可以通过以下几种方法实现: 方法…

OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——mqtt库

准备工作 请依照这篇文章搭建环境 OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——环境配置_openharmony交叉编译-CSDN博客 下载 wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.5/gnutls-3.5.9.tar.xz 解压 tar -xf mkdir ./out cd ./out Cmake命…

数据结构 -- 顺序查找和折半查找

查找的基本概念 基本概念 查找:在数据集合中寻找满足某种条件的数据元素的过程 查找表(查找结构):用于查找的数据集合称为查找表,它由同一类型的数据结构元素(或记录)组成 关键字&#xff1…

信息收集+初步漏洞打点

目标:理解信息收集在渗透测试中的意义,熟悉常用工具用法,完成基本打点测试 一.理论学习: 模块内容说明信息收集分类主动信息收集 vs 被动信息收集目标发现子域名、IP、端口、子站点、目录、接口技术指纹识别Web框架(如…

JavaScript【5】DOM模型

1.概述: DOM (Document Object Model):当页面被加载时,浏览器会创建页面的文档对象模型,即dom对象;dom对象会被结构化为对象树,如一个HTML文档会被分为head,body等部分,而每个部分又…

Cloudflare防火墙拦截谷歌爬虫|导致收录失败怎么解决?

许多站长发现网站突然从谷歌搜索结果中“消失”,背后很可能是Cloudflare防火墙误拦截了谷歌爬虫(Googlebot),导致搜索引擎无法正常抓取页面。 由于Cloudflare默认的防护规则较为严格,尤其是针对高频访问的爬虫IP&…

如何在 Windows 11 或 10 的 CMD 中检查固件

检查 Windows 11 或 10 中现有设备的硬件固件版本,可以帮助用户安装和更新准确的驱动程序,进行故障排除活动,确保兼容性以及维护系统性能。因此,在本教程中,我们将讨论如何在命令提示符(CMD)中使用一些命令查找 Windows 服务器或桌面中硬件固件版本的方法。由于本教程将…

进阶-数据结构部分:3、常用查找算法

飞书文档https://x509p6c8to.feishu.cn/wiki/LRdnwfhNgihKeXka7DfcGuRPnZt 顺序查找 查找算法是指:从一些数据之中,找到一个特殊的数据的实现方法。查找算法与遍历有极高的相似性,唯一的不同就是查找算法可能并不一定会将每一个数据都进行访…

基于QT和FFmpeg实现自己的视频播放器FFMediaPlayer(一)——项目总览

在音视频开发的学习过程中,开发一款视频播放器是FFmpeg进阶的最好实战方法。本文将基于 QT 和 FFmpeg 着手实现自定义视频播放器 FFMediaPlayer,作为系列文章的开篇,我们先来整体了解项目的设计思路、架构与配置。 一、软件设计五大原则​ …

【HCIA】浮动路由

前言 我们通常会在出口路由器配置静态路由去规定流量进入互联网默认应该去往哪里。那么,如果有两个运营商的路由器都能为我们提供上网服务,我们应该如何配置默认路由呢?浮动路由又是怎么一回事呢? 文章目录 前言1. 网络拓扑图2. …

使用instance着色

本节我们学习使用instance着色器进行着色 //拾取var handler new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);handler.setInputAction(function(movement){console.log(movement);var pickedObject viewer.scene.pick(movement.position);if(Cesium.defined(picke…

【NLP 72、Prompt、Agent、MCP、function calling】

命运把我们带到哪里,就是哪里 —— 25.5.13 一、Prompt 1.User Prompt 用户提示词 当我们与大模型进行对话时,我们向大模型发送的消息,称作User Prompt,也就是用户提示词,一般就是我们提出的问题或者想说的话 但是我们…

Mysql数据库之集群进阶

一、日志管理 5.7版本自定义路径时的文件需要自己提前创建好文件,不会自动创建,否则启动mysql会报错 错误日志 rpm包(yum) /var/log/mysql.log 默认错误日志 ###查询日志路径 [rootdb01 ~]# mysqladmin -uroot -pEgon123 variables | grep -w log_e…

临床决策支持系统的提示工程优化路径深度解析

引言 随着人工智能技术在医疗领域的迅猛发展,临床决策支持系统(CDSS)正经历从传统规则引擎向智能提示工程的范式转变。在这一背景下,如何构建既符合循证医学原则又能适应个体化医疗需求的CDSS成为医学人工智能领域的核心挑战。本报告深入剖析了临床决策支持系统中提示工程的…