编码体系与规范

article/2025/10/14 17:02:11

编码体系与规范

网页编码是指网页中字符的编码方式。目前国内常见的网页字符编码主要有utf-8、gbk、gb2312,其中 utf-8为国际化编码,在各国各地区的网站中都很常见,可以说是最通用的字符编码。此外,有些日本网页会使用EUC-JP、SHIFT-JIS,有些韩国网页会使用EUC-KR等字符编码。

1 ASCII

ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是美国在20世纪60年代制定的一套字符编码标准,主要用于显示美式英语、标准ASCII码使用7位二进制编码表示美式英语中会使用到的控制字符(例如退格、空格)以及可打印字符(例如数字0~9、大小写英文字母、标点符号、运算符号、美元符号),编码范围为0~127(二进制 00000000~01111111)。
ASCII共表示128个字符,每个字符占一个字节,其中控制字符共33个。例如控制字符退格“backspace”为8(二进制00001000),可打印字符大写字母“A”为65(二进制01000001)。

2 gb2312/gbk

由于ASCII编码无法表示中文字符,中国在ASCII编码的基础上进行扩展,形成了中文字符编码,主要有gb2312、gbk以及gb18030。

2.1 gb2312

gb2312编码(《信息交换用汉字编码字符集》)是对ASCII的中文扩展,编码低于127的字符与ASCII编码相同。gb2312 使用两个字节连在一起表示一个汉字,两个字节中前一个称为高字节(范围0xA1~0xF7),后一个称为低字节(范围0xA1~0xFE)。其编码范围是0xA1A1~0xF7FE。

gb2312共收录6763个汉字,每个汉字占两个字节。同时,gb2312对ASCII中的可打印字符重新编了两个字节长的编码,也就是人们常说的“全角”字符;编码低于127的可打印字符为“半角”字符。

2.2 gbk

gbk编码是gb2312的扩展,gbk兼容gb2312的所有内容并且又增加了近2000个新的汉字(包括繁体字)和符号ehk 同样使用两个字节表示一个汉字,只要第一个字节大于127,便认为是一个汉字的开始。其编码范围是0x8140~0xFEFE。

3 unicode

unicode(Universal Multiple-Octet Coded Character Set,通用多八位编码字符集)包含了世界上所有的文字和字符、在unicode字符集中每个字符都有唯一的特定数值。例如大写字母“A”在unicode中的码位为U+0041,汉字“乐”的码位为U+4E50。unicode通常使用两个字节来编码,称为UCS-2(Universal Character Set coded in 2 octets)。为了使unicode 能表示更多的文字,人们提出了UCS-4,使用4个字节编码。

目前unicode 编码范围为0~0x10FFFF,最大的字符至少需要3个字节来表示。表示字符需要的字节数不相同,若直接在网页中使用会出现混淆问题;如果规定所有的字符都使用最大字节表示,会造成极大的空间浪费。为了解决编码字符集unicode 在网页中使用的效率问题,人们提出了utf-8、utf-16等编码方式。

4 utf-8

utf-8(8-bit Unicode Transformation Format)是一种针对 unicode字符集的可变长度字符编码方式。utf-8对不同范围的字符使用不同长度的编码,规则如下。

  1. unicode 码点在0x00~0x7F的字符,utf-8编码与ASCII编码完全相同。
  2. unicode 码点大于0x7F的字符,设需要使用n个字节来表示(n>1),第一个字节的前n位都设为1,第n+1位设为0,剩余的n-1个字节的前两位都设为10,剩下的二进制位使用这个字符的unicode码点来填充。

5 编码转换

Python 3中的字符串默认的编码为unicode,因此,gbk、gb2312等字符编码与utf-8编码之间都必须通过unicode编码才能互相转换。即在python中,使用encode()将unicode编码为utf-8、gbk等,而使用decode()将utf-8、gbk等字符编码解码为unicode

image-20221102104616123

image-20221102111504960

6 查看数据编码格式

6.1 查看网页编码

我们在查看网页编码的编码格式可以使用requests库中的apparent_encoding查看网页的编码方式。

import requests
resp=requests.get('https://www.baidu.com/')
resp.apparent_encoding

image-20221102105518274

6.2 查看字符串编码

这里我们使用chardet模块。

chardet模块
The easiest way to use the Universal Encoding Detector library is with the detect function.
使用通用编码检测器库的最简单方法是使用detect函数
The detect function takes one argument, a non-Unicode string. It returns a dictionary containing the auto-detected character encoding and a confidence level from 0 to 1.
detect函数有一个参数, 即非 unicode 字符串。它返回一个字典, 其中包含自动检测的字符编码和从0到1的置信度。

import chardet
print(chardet.detect(str.encode('abc123')))
print(chardet.detect(str.encode('张三')))
print(chardet.detect(str.encode('\xe5\xa4\xa7')))

输出结果为:

image-20221102110948986

注意:chardet.detect 在查看字符串传的编码时,必须要把字符串encode后,才能查看当前字符串编码格式


http://chatgpt.dhexx.cn/article/YWv7KlrV.shtml

相关文章

python编码规范

PE8基本规范: 建议修改在使用的 IDE 中修改 PEP8 的每行字数不超79字符规范,可修改为 Django 建议的 119 字符 一、python编码规范: (一)代码编码: 1、国际惯例,文件编码和 Python 编码格式全部为 utf-8 ,…

JAVA编码规范

命名风格 代码命名不能以下划线或者美元符号开头或者结尾代码命名不能以中文拼音或者中文拼音与英文混合方式类名使用UpperCamCamelCase风格,但DO、PO、DTO、VO、BO等除外方法名、参数名、变量名统一使用lowerCamelCase,必须遵守驼峰命名常量名全部大写…

【编码规范篇】| C#编码规范 代码规范总结,包括命名规范,代码规范 注释规范等

🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉 🎄 学习专栏推荐:Unity精品学习专栏 🌲 游戏制作专栏推荐:游戏制作分享 &…

编码的一些基本规范

1. 数据库表设计 Rule 1. 【强制】表名小写,多个word之间用英文下横线_分隔Rule 2. 【强制】表名普通表前缀t_;临时表tmp_;备份表bak_;视图v_;主键pk_;外键fk_;唯一索引uix_;普通索引idx_Rule 3. 【强制】关系表统一用relation结尾Rule 4. 【强制】表名和业务字段必…

编码规范汇总【持续更新】

目录 前言规范标准C规范C#规范 规范记录命名硬编码单例类【线程安全】Qt定义类【隐式内存共享】 前言 作为软件工程师,出产物就应该具备工程的健壮性和美观性。因此代码规范是作为软件工程师的职业素养。但总所周知,程序员的工作基本就是在维护一座屎山…

51单片机串口波特率

SCON SCON 0X50工作方式1 波特率需要使用定时器1 波特率 ((2^SMOD)/32) * (定时器溢出率) 定时器溢出率 系统时钟/指令周期/装载数 SMOD 1 ,波特率加倍 TH1 TL1 -(FOSC / INSTRU_CYCLE / 32 / BAUD); //Set auto-reload vaule TR1 1;

关于51单片机串口1发送完整的数据包

关于51单片机串口1发送完整的数据包 在参考这样的协议的条件下我们想发送一套完整的数据包该如何发送呢?可以设计这样的程序。 1. 串行口1接收特定包头数据包函数。 参数: Uart_Rec_Data:串口接收到的数据 ; USER_Get_DataPacket: 数据存储目…

51单片机串口收发

#include<reg52.h>#define uint unsigned int #define uchar unsigned char/*本代码实现串口的收发功能&#xff0c;PC发送什么单片机就接收什么&#xff0c; 然后单片机又把接收的发出去&#xff0c;本次编写了在发送单个字符串 函数上添加了字符串函数&#xff0c;方便…

学习51单片机串口工作方式及应用

1.串口控制寄存器SCON SM2:多机通信控制位 REN:允许接收控制位 TB8:发送第九位数据 RB8:接收第九位数据 TI:发送中断标志位 RI:接收中断标志位 2.电源控制寄存器PCON 当SMOD位为1&#xff0c;则串行口方式1、方式2、方式3的波特率加倍。 3.串口的工作方式 &#xff08;1…

关于51单片机串口通信的相关知识(寄存器)

一、51单片机串口概念 1、51单片机的串行口 51单片机的串行口是一个可编程全双工的通信接口&#xff0c;具有UART&#xff08;通用异步收发器&#xff09;的全部功能。 2、51单片机的硬件连接 简单双向串口通信有两根数据通信线&#xff1a; 发送端TXD&#xff08;Transmit Da…

C51单片机串口点亮一个led

C51单片机串口点亮一个led 因为最近要用到51的串口做一些通信&#xff0c;这里写一个点led的程序记录一下。 说是一个led&#xff0c;其实可以随意多个。 主要使用到的东西&#xff1a; STC89C52芯片&#xff0c;USB转TTL下载器&#xff0c;led灯若干&#xff0c;面包板&am…

51单片机 串口

串口说白了&#xff0c;就是初始化后&#xff0c;用中断接收发送字符而已。 TXD 是 80C51 单片机的P3.1口&#xff0c;RXD 是80C51 单片机的 P3.0口 T1 溢出率 是定时器1的溢出率 &#xff0c;SMOD是发送速率倍频的16分频&#xff0c;T1每溢出一次发送一位&#xff0c;每次发送…

【记录】一次51单片机串口乱码问题排查

【记录】一次51单片机串口乱码问题排查 项目场景问题描述原因分析解决方案结语 项目场景 在51串口收发仿真实验中使用两个单片机互相通信&#xff0c;程序设定A上电1s后通过串口以16进制给B发送AA,直到B收到AA后回复BB&#xff0c;当A机确认收到AA后开始发送数据&#xff0c;若…

## 51单片机串口通讯

1&#xff0c;接线方式&#xff1a; RXD: 数据输入引脚&#xff1b;对应stc89的P3.0口&#xff1b; TXD&#xff1a;数据的发送端口;对应P3.1口&#xff1b; 注意&#xff1a;单片机的的串口TX&#xff0c;RX与外设交叉接线&#xff1b; 2串口编程要素 输出/输入数据缓冲器S…

51单片机串口通信详解

文章目录 前言一、计算机通信简介二、串口通信简介1、简介2、同步通信和异步通信2.1 同步通信2.2 异步通信 3、串行通信的传输方式4、串口通信硬件电路5、常见接口介绍 三、串口相关寄存器详解1、特殊功能寄存器SCON2、PCON寄存器3、TMOD寄存器&#xff08;定时器工作方式寄存器…

51单片机串口接收处理

目的: 通过51单片机串口外设功能&#xff0c;来对一组数据进行处理&#xff0c;新手刚刚入门可能会将串口接收到的一个数据直接赋值给一个变量&#xff0c;然后用这个变量做相应功能&#xff0c;可是这样写的不稳定性太高了&#xff0c;有可能会接收不到你要的那个数据&#…

51单片机串口通信原理

计算机串行通信基础 通信有串行通信和并行通信两种方式 串行通信&#xff1a; 将数据字节分为一位一位的形式在一条数据线上逐个传送。如下图所示 串行通信特点&#xff1a;传输线少&#xff0c;长距离传送时成本低&#xff0c;且可以利用电话网等现成设备&#xff0c;但数据的…

51单片机串口点灯

#include "reg52.h" #include "intrins.h" sfr AUXR 0x8e; sbit D5 P3^7; //定义led 接在P3.7void UartInit(void) //9600bps11.0592MHz {SCON 0x50; //配置串口工作方式1&#xff0c;RE使能接收数据 0101 0000PCON 0x00; TMOD &0x0F;TMOD |0x2…

51单片机串口使用

文章目录 前言一、串口概念二、中断中的RI、TI和SUBF1.RI2.TI3.SUBF 三、串口波特率的计算四、代码的编写总结 前言 今天将为大家讲解51单片机的串口原理及代码编写。 一、串口概念 51单片机串口是一种通信接口&#xff0c;它可以将51单片机与外部设备连接起来&#xff0c;实…

51单片机串口通信

串口通信 1、通信的基本概念2、 51单片机串口介绍2.1、串口通信简介2.2、串口内部结构2.3、串口通信寄存器SCONPCON 2.4、串口工作方式 3、串口使用方法3.1、硬件3.2、通信协议RS2323.3、串口初始化 4、硬件设计5、 软件设计6、拓展 串口的通信&#xff0c;一般是检测通信模块是…