网络编码格式

最近公司项目中,协议下发的报文 要进行base64 转码、UTF8 转 GB2312,对于中间的转换、为何需要转换、转换前后字符长度的变化,自己一直都比较不理解,这里整理一下,方便后续忘记的时候,再翻出来看看:

先介绍几种编码格式:
HEX格式:
Hex的编码原理是:把一长串二进制数每4个分一组,如果位数不够就在高位补0。4位数字一共只有16种情况,分别用0-9,A-F表示这16种情况。
在这里插入图片描述
ASCII码
美国信息交换标准代码,简称ASCII码表;这个码表包括了数字、英文大小写、符号、以及各种各样的转义字符,可以包含英文所用的全部功能。很快地,ASCII码称为了国际标准,现在大家知道的编码形式,都是与ASCII码兼容的。
在这里插入图片描述
从字面上我们就能知道,这是一套用于显示英语和西欧语种的编码体系。
它包含常用的英文字母、数字及一些特殊字符和控制符等共计127个字符,是最通用的单字节编码系统,即一个字符对应一个唯一的ASC II码。
随着个人计算机在全球的普及,很明显单字节的字符编码根本不能满足各个国家、各个语种的编码和显示需求,这个时候就需要针对不同语种定制不同的编码规范。
GBK、GB2312以及UTF-8就是在这种条件下诞生的

GBK 和 GB2312
GB指代的“国标”,即“国家标准”。
GB2312包含了常用的中文字符,同时也兼容ASCII码。在这种编码规范中,ASCII码占一个字节,码值在0-127之间;中文字符占两个字节,码值在127~256之间。
GBK兼容GB2312编码,但比GB2312包含了更多的汉字:中文存储时,第一个字节码值在127-256之间,第二个字节码值在0~256之间。
UNICODE编码的

UTF-8
这个编码又称为万国码,顾名思义,就是支持包括中文简体、中文繁体、日语、韩语等各种语言的编码。
UTF-8是UNICODE编码的一种实现方式。
UFT8是一种国际化的编码方式,包含了世界上大部分的语种文字,也兼容ASCII码。
这类标准依据文字的不同,使用1~6个字节来存储字符,是一种多字节的编码规范。它对英文使用一个字节(8位)存储,对中文使用三或4个字节存储
在WEB编码格式的使用上应该如何选择呢?
编码格式的选择主要在于文本内容和面向的用户范围。
UTF8是国际通用编码,适用范围更广,如果文本内容的英文字符较多或者注重多国用户体验的网站,UTF8是首选。

BASE64
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。
base64其实不是安全领域下的加密解密算法。虽然有时候经常看到所谓的base64加密解密。其实base64只能算是一个编码算法,对数据内容进行编码来适合传输。虽然base64编码过后原文也变成不能看到的字符格式,但是这种方式很初级,很简单。
base64 产生背景:不想被人获取到明文后,直接得知内容,必须解密之后才能阅读。
Base64就是在这种背景下产生的加密方法。它的特点是:1、速度非常快。2、能够将字符串A转换成字符串B,而且如果你光看字符串B,是绝对猜不出字符串A的内容来的。
例如:
转换前 aaaaaabb ccccdddd eeffffff
转换后 00aaaaaa 00bbcccc 00ddddee 00ffffff

Base64编码原理:
Base64就是说选出64个字符,包括小写字母a-z、大写字母A-Z、数字0-9、符号”+”、”/”作为基本基础集的编码方式。
①将每三个字节作为一组,一共是24个二进制位。
②将这24个二进制位分为四小组,每个小组有6个二进制位。
③在每小组前面加两个00,扩展成32个二进制位,即四个字节。
④根据base64基础表,得到扩展后的每个字节的对应的base64符号。

经过Base64 转码后数据长度的变化:
基本知识:UTF-8编码下的中/日/韩文占了3/4个字节
若中文 占四个字节是最长的情况:则base64 转换后长度比是 1 : 8
1个中文字符 –》 4个字节 –》 每三个字节分为一组,则分成两组,共6个字节 –》 扩展,得到8个字节 –》 将8个字节转换成8个base64字符。

毕竟四个字节占少数,三个字节情况下:则base64 转换后长度比是1 : 4
1个中文字符 –》 3个字节 –》 每三个字节分为一组,则分成一组,共3个字节 –》 扩展,得到4个字节 –》 将4个字节转换成4个base64字符。
因此加密后的字符长度为原长度的4~8倍。

所以:
字符串:“爱我中华”——中文4个

UTF-8格式:需要44=12 字节(按一个中文需4字节计算)
GB2312:需要2
4=8字节

一些特殊字符 如:’
UTF-8下是:’
GB2312下是:@pos
若网络传输中用的是UTF-8,设备存储中用的是GB2312,那么 这些特殊字符 在设备中 存储一次,然后再获取的时候,界面上显示就不对了,会显示 乱码 或一些奇怪的字符。

问题一:为何要转码:
1. 为何要Base64 转码?
——不希望一些敏感信息被人直接看见,如秘钥。但是感觉如果进行Base64 解码还是能看见,不明白为啥这么设计;
2. 为何 UTF-8转GB2312?
——网络中传输的都是国际标准编码UTF-8格式,而公司底层数据库存的是GB2312编码格式

问题二:转换后 长度的变化?
1. UTF-8转为 Base64 长度变化?
——长度变为 4-8 倍不等:若 1个中文字符是用4字节UTF-8 存储,则Base64 转码后变为8字节;经Base64 转码后 长度变大
2,UTF-8转为GB2312长度变化?
——一个中文字符,4(或3)字节UTF-8,2字节GB2312;UTF-8 转GB2312长度会变短;反之变长

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值