编码和解码

article/2025/11/6 21:20:53

概念

字符的三种形态
字符的三种形态

图片来自:https://zhuanlan.zhihu.com/p/25435644

编码:将字符转为字节序列(abcdefg-------------> 0101010…10010)
解码:将字节序列转为字符(1001010…10010110------> abcdefg)

各种编码

ASCII编码

计算机,它只认识0和1,也就是高低电平。于是想让计算机识别我们人类的语言,也就是字符,则需要一个对应关系。由于计算机在美国诞生,于是美国给了一个对应关系表,称为ASCII编码
在这里插入图片描述

各个国家的编码

各个国家为了使用计算机,也需要本国的语言符号被计算机识别,于是各种编码层出不穷:中国有GBK,日本有EUC-JP,韩国有EUC-KR,甚至一个国家也不只有一种编码,比如中国繁体还有big5等等。总之就是,每个国家为了让计算机认识自己国家的文字,都出了许多对应的编码。

统一编码

每个国家都制定了自己的编码,每个网站都可以在自己的国家运行良好。但互联网是让全世界连成了一体,当本国发出的信息走向国际时,多语言环境让每一种编码都措手不及。于是出现了unicode编码。

Unicode(中文:万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得计算机可以用更为简单的方式来呈现和处理文字。

Unicode伴随着通用字符集的标准而发展,同时也以《The Unicode Standard》书本的形式对外发表。Unicode至今仍在不断增修,每个新版本都加入更多新的字符。当前最新的版本为2019年3月5日公布的12.0.0[2],已经收录超过13万个字符(第十万个字符在2005年获采纳)。Unicode涵盖的数据除了视觉上的字形、编码方法、标准的字符编码外,还包含了字符特性,如大小写字母。 ——维基百科

说白了,unicode编码就是收录了全世界的所有字符,统一进行编码。也就是给每一个形状赋予一个数字,这是它的编码方式,但是怎么实现的呢?
Unicode的实现方式不同于编码方式。一个字符的Unicode编码是确定的(也就是说,字符对应的数字是确定的)。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对Unicode编码的实现方式有所不同(也就是说,这个数字用几个字节来存有所不同)。Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format,简称为UTF)。比如UTF-8、UTF-16等。可以简单理解,unicode是一个字符集,utf8等是这个字符集的不同编码规则实现。

从mysql中读取数据的编解码历程

这个是个简单的场景:中间的服务器中跑了一个javaweb项目,他把mysql中的数据拿出来,然后交给前端展示。
首先数据库中已经有了数据,比如我们存了一句话“i am tian 峰”。mysql中的数据说到底还是一种特殊文件,并且是以二进制补码的形式存在磁盘上。换句话说,就是一串有规律的0101。当我们向数据库发起查询请求之后,mysql首先得将需要查的这串0101读取出来,然后进行编码转换(有一个参数叫character_set_results指明了返回数据的编码),再发送给java后台,我们收到这串0101之后,将它转发给前端浏览器,浏览器采用指定的编码进行解码,得到对应的数字,然后对照字符集合,将字符图形展示出来。
说一个下这个简单项目的各个编码参数:

  • 平台:windows(默认编码GBK)
  • mysql:utf-8
  • 浏览器页面:utf-8

当我们通过jdbc完成查询,得到ResultSet之后就可以进行数据的处理了。此时ResultSet中的数据不只有数据,还有此数据的编码类型。我们就可以进行数据的处理了。

在这里插入图片描述
图中我标出了三个箭头,分别指向A、B、X三行。先说一下结果:如果我们注释掉A行,使用B和X,那么浏览器将正常显示中文字符;如果注释掉B行,使用A和X,那么浏览器将出现乱码。X行就是将buffer中的字节数组返回给http客户端(浏览器),A行是将字符串ss转换为自己数组放入buffer中,ss是从set中get到的。get的过程就是一个解码的过程,set中本来是mysql返回的经过utf-8编码得到的字节数组,ss就是通过解码得到的对应字符串。这里解码时使用的编码是resultSet指定的,也就是mysql服务端指定的,于是可以很顺畅的得到一个正常的字符串。但是A行又要将这个字符串进行编码,得到字节数据,这里采用的编码还是服务端指定的吗?可惜不是了,他会采用平台默认的编码,就是GBK。对与中文来说,GBK存储中文使用两个字节,而UTF-8使用三个。但是也没啥,不过就是采用新的编码,由UTF-8转到了GBK,但是不巧的是,上边说了,浏览器使用的是utf-8。当浏览器采用utf-8去解码gbk编码产生的字节数时,发现自己并不认识这个字节序列。于是出现了乱码,但此时,只要我们将浏览器页面编码改为gbk(html页面中可以设置字符编码),立刻就恢复了正常。


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

相关文章

编码器和解码器

1.编码器—解码器(seq2seq) 编码器的作用是把一个不定长的输入序列变换成一个定长的背景变量c,并在该背景变量中编码输入序列信息。常用的编码器是循环神经网络。 编码器可以是一个单向的循环神经网络,每个时间步的隐藏状态只取决…

二维码解码工具

http://tool.chinaz.com/qrcode/?jdfwkeyweexu

编解码工具

支持各种文件摘要(Hash)、Base64编码、Hex编码、国密sm2加密、Rsa加密,以及各种对称加密算法的小工具 下载地址:https://pan.baidu.com/s/1AJwUaVizzk5HeLa_8Q5AqA 提取码:4567

编码与解码

什么是编码与解码 电脑是由电路板组成,电路板里面集成了无数的电阻和电容, 交流电经过电容的时候,电压比较低 记为低电平 , 用0表示,交流电流过电阻的时候,电压比较高,记为高电平,用…

Encoder编码器、Decoder解码器

知乎用户对编码器解码器的理解 Encoder: 本身其实就是一连串的卷积网络。该网络主要由卷积层,池化层和BatchNormalization层组成。卷积层负责获取图像局域特征,池化层对图像进行下采样并且将尺度不变特征传送到下一层,而BN主要对…

Protobuf在线解码工具推荐

P1: CyberChef 地址:CyberChef 非常灵活,支持各种导入格式可以直接转成json支持导入.proto文件 P2: protobuf-decoder 地址:protobuf-decoder 有对齐问题 P3: protogen 地址:protogen 有乱码问题 P4: PB-JCE-Decoder&…

在线JWT Token解析解码工具

1:JWT Token在线解析解码 - ToolTT在线工具箱 2: 3:

密码解码常用工具网站汇总

xssee:http://web2hack.org/xssee xssee:http://evilcos.me/lab/xssee 在线编码解码(多种并排):http://bianma.911cha.com 在线加密解密(多种):http://encode.chahuo.com Unicode转中文:http://www.bejson.com/convert/unicode_chinese 栅栏密码 && 凯撒密码 &&…

URL在线编码/解码工具

一刀工具箱提供在线URL编码解码工具:对网址Url进行UrlEncode编码转换,UrlEncode编码,UrlDecode解码。 代码片段 methods:{convertEncode(){this.item encodeURIComponent(this.value)},convertDecode(){this.item decodeURIComponent(this.value);}} URL在线编码/解码工具 …

URL 编码和解码工具

简介 本文简要介绍一款编解码工具,它支持URL编码和解码、Base64编码和解码。 官网地址:https://smart-tools.cn/dev/encoder/app 背景 URL编码 URL编码是浏览器发送数据给服务器时使用的编码。它是编码算法,而不是加密算法。其目的是把任…

HTK 3.5解码工具HVITE独立工程(Visual Studio Code实现)

HTK3.5支持DNN HTK3.5支持DNN了,本来想做一个HMMDNN的模型,作为HMMGMM的对比。但是HTK不支持实时的HMMDNN解码。原因有两个。 HTK不支持实时的计算MFCC_0_D_A_Z的特征,即无法实时计算出特征空间的均值。HTK不支持实时的DNN或者HMMDNN的解码…

全自动解密解码神器 — Ciphey

Ciphey 是一个使用自然语言处理和人工智能的全自动解密/解码/破解工具。 简单地来讲,你只需要输入加密文本,它就能给你返回解密文本。就是这么牛逼。 有了Ciphey,你根本不需要知道你的密文是哪种类型的加密,你只知道它是加密的&…

Linux搭建NTP时间服务器

1. NTP简介 NTP(Network Time Protocol 网络时间协议)是一个用于同步计算机时钟的网络协议。它可以使计算机与其他服务器或时钟源进行时间同步,进行高精度的时间校正。 简而言之,NTP就是使一台或多台服务器(客户端&a…

windows NTP服务器搭建方法/步骤

一、在开始菜单栏中,点击“运行”(WIN R),输入regedit,打开Windows 注册表 二、设定成为NTP 服务器类型 注册表路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters 修改Par…

NTP 服务器搭建

一、功能介绍: 威纶通 HMI 实现与 Windows NTP 服务器实现时间同步。 二、准备条件: 1. 电脑或者工控机(Windows 系统) 2. 支持 NTP 服务器的触摸屏 预设:PLC IP 为 192.168.10.100 电脑本机 IP:192.168.10.200 …

Linux搭建ntp服务器(全)

时间服务器作用: 大数据产生与处理系统是各种计算设备集群的,计算设备将统一、同步的标准时间用于记录各种事件发生时序, 如E-MAIL信息、文件创建和访问时间、数据库处理时间等。 大数据系统内不同计算设备之间控制、计算、处理、应用等数…

【测试环境】搭建NTP服务器(windows10)

一、服务器搭建准备 设备:笔记本、台式电脑 操作系统: windows10 网络:1)可被局域网中其他主机访问;2)可访问外部internet 二、服务器搭建操作步骤 1. 将服务器类型更改为 NTP a. win R打开运行&#…

Windows下安装NTP服务器

软件推荐 这里推荐一个批量远程桌面软件:IIS7远程桌面管理工具,它可以批量连接n台服务器vps,并且支持群控功能。 IIS7远程桌面管理工具(3389、vps、服务器批量管理、批量远程工具)简介: 1、批量管理WIN系列服务器,VP…

centos 7 中NTP时间服务器搭建

一:时间,时区设定 1.查看当前系统日期和时间: date [rootkevin ~]# date 2021年 12月 18日 星期六 21:41:42 CST2.在中国时区是CST,如果显示时区不正确,修改:tzselect (time zone)输入数字选择 …

Linux下搭建ntp时间服务器

NTP(Network Time Protocol)服务器是用于局域网服务器时间同步使用的,可以保证局域网所有的服务器与时间服务器的时间保持一致,应用于对时间实时性要求高的、必须统一时间事件。 NTP时间服务器是一个简单的常用的服务器&#xff…