首页 > 其他分享 >编码相关总结

编码相关总结

时间:2023-10-17 22:11:09浏览次数:47  
标签:总结 编码 utf 字节 字符 码点 相关 编码方式

编码相关总结

一:基础

字符集:字符的集合,如ASCII是英文字符集,Unicode是最全的字符集, GB2312 是汉字字符集。 编码方式:字符集的字节表示方式,定义了一个字符用几个字节,用那些字节(码点)表示这个字符。 关系:一个字符集至少有一种编码方式,如Unicode有utf-8和utf-16等编码方式。

术语:编码

动词编码:将字符用码点表示,一般是指设计字符集的编码方式的过程,即字符->字节。 名词编码:码点,或字节序列。 编程语言中的编码:一般指将数据由一种形式或格式转为另一种形式的过程。 有些文章说编码是字符->字节,解码是字节->字符。个人认为是不准确的。字符之所以能显示,是因为其底层是字节序列,且有默认的编码方式,如Go语言默认是utf-8。所以凡是能看到的字符底层是unicode码点,本身就编码过不需要再编码了。什么时候需要编码呢?字节序列在Go中默认是utf-8编码,但是预期是通过hex或base64字符串显示呢?所以要对字节序列进行hex编码或base64编码,编码后还是字节序列,但是要显示为字符串还是通过utf-8编码显示。 所以这样看来,编码更像是源字节->目标编码方式的字节再显示成字符的过程。 总结:编码还是解码都是字节->字节,字符底层表示是字节,字符显示不是编程语言的事也与编码无关。

编码转换:一种码点->另一种码点,通过算法和查询两种字符集之间的码点映射来实现。

xml,json字符串和[]byte

//string底层数据是字节数组,是utf-8的码点字节
//[]byte字节切片,所有数据最底层都是二进制数据,[]byte是给编程提升可读性的,而不是直接操作二进制。
//json字符串,jsonStr是string类型,底层是utf-8编码的字节数组,如果需要进行传输将其强转为[]byte即可。xml字符串同理。
jsonStr := `{"a":1}`
jsonData := []byte(jsonStr) //字节切片,可用于传输
//原本有一个utf-8编码json格式的字节数据,想要显示
jsonData := []byte{...}
jsonStr := string(jsonData)

//struct<->xml或json
//结构体相对是复杂的数据结构,不适合传输,所以要将其序列化为字节序列。用xml或json格式存储。
序列化(Marshal):结构体等复杂类型->json等字符串(底层是utf-8字节序列)
反序列化(Unmarshal):json等字符串(底层是utf-8字节序列)->结构体等复杂类型

BIN码-是最底层的编码

二进制码,可以表示数字、字符、图像等。计算机中所有数据最终都一二进制码的方式存储、传输和处理。

和utf-8等编码的关系,utf-8只是用一个码点对应一个字符,码点的底层表示是二进制码,只是我们处理时使用字节。

BCD码

BCD(Binary-Coded Decimal)码是一种将十进制数字的每一位分别用四位二进制表示的编码方式。

如:整数10的BCD码表示0001 0000

作用:使用BCD码存储浮点数不会丢失精度,相比二进制码也更节省空间。

HEX编码

将十进制整数转为两位十六进制字符(ASCII编码存储)

如 整数10,十六进制为0a,经过hex编码后底层字节为[48 97],48对应字符0,97对应字符a。

作用:提升数据可读性

base64编码

将二进制数据编码为字符的一种编码方式,有些只能传输ASCII字符的协议或者有些二进制有特别作用(如果用二进制就有歧义),不适合直接使用二进制编码,就可以用base64编码进行传输,到时候再解码。

标签:总结,编码,utf,字节,字符,码点,相关,编码方式
From: https://www.cnblogs.com/longanWu/p/17770845.html

相关文章

  • OSG嵌入QT的简明总结2
    正文我之前在这篇博文《OSG嵌入QT的简明总结》中论述了OSG在QT中显示的可视化问题。其中提到官方提供的osgQt项目(地址:https://github.com/openscenegraph/osgQt)很久前已经更新了。但是我一直没有时间同步更新,最近重新尝试了一下,还是有一些问题。原先的osgQt版本是兼容Qt4的QGLW......
  • 每日总结10.16
    今天的学习经历非常充实,早上我们进行了工程实训,学习了铁道知识,下午则投入了四节的Java编程学习,主题是异常处理。这一天的学习经验让我感到收获颇丰,以下是对这些学习内容的总结和反思。在工程实训中,我们深入了解了铁道领域的知识。铁路系统是一个复杂的工程,我们学习了铁路的基本构......
  • 10.17总结
    今天在写java作业时学习了新东西一、在java程序中使用sql时的传参方法背景:使用java连接数据库,需要往数据库中传递参数,需要使用到sql语句 1Stringtopic=list.get(i).getEnd();2intres=list.get(i).getSum(); 例如: 1sql="insertintofour(topic,result)values('"......
  • 比赛总结:Japan Registry Services (JPRS) Programming Contest 2023 (AtCoder Beginn
    比赛:JapanRegistryServices(JPRS)ProgrammingContest2023(AtCoderBeginnerContest324)A-same1.常规方法intmain(){ intn; cin>>n; vector<int>s(n);//利用vector容器可以不需要确定内存大小 for(auto&n:s) { cin>>n; } for(inti=0;i......
  • To_Heart—总结——没有鸟会为雪花祈祷[SCP2023游寄]
    睡了一个多小时。......
  • 每日总结2023年10月17日
    把这段时间学习的内容总结一下:首先是对于SpringBoot的请求和响应,然后是Mybatis的学习,主要就是一个Mapper注解和XML映射文件的学习使用,这极大的提高了我的开发效率。大数据这边跟着老师的节奏做了一个result项目的数据清洗和展示,能够搞懂一点前端的Ajax内容,加深了HiveQL的语言学习......
  • 10.17每日总结
    今天完成了大型数据库的第二个作业,也就是在hive下用hiveql去分析数据,具体流程跟前半部分跟上一次我的做法一样,(大数据作业避坑-风·华正茂-博客园(cnblogs.com)),只需要改文件名和文件路径,不一样的是最后一步,就是要先进到hive文件夹下:执行:bin/hive然后分行执行如下命令:......
  • 2023.10.14 总结
    T1题面:给\(n\)个数染色,要求使\(|i-j|\)为质数的两个数染的色不能一样,求任意一种染色方法。\(n\le6\)时直接打表,之后模拟一下。容易发现,\(2\)是质数中唯一一个偶数,所以我们可以\(1234\)连续染色,由于\(4\)是偶数且大于\(2\),所以差为质数的颜色不会相等。最后输出......
  • ecshop | php接入支付宝申报海关接口的总结【避坑】
    第一次对接支付宝的报关接口,害!不明白这个流程是很难接上的,搞了一天半,终于给搞出来了。在这里留下一点文字吧。代码前工作:用支付宝的密钥生成工具生成一对2048的公私钥,这对公私钥用来完成支付宝支付的加签和验签。把公钥上传到开放平台密钥中对应使用的应用接口加签方式中,私钥......
  • MounRiver工程配置讲解总结
    MRS配置汇总:1.MounRiver工程配置讲解一(添加全局宏定义)2.MounRiver工程配置讲解二(将灰色库的文件参与或排除编译)3.MounRiver工程配置讲解三(打印转行符和浮点数)4.MounRiver工程配置讲解四(报警告thereisahole)5.MounRiver工程配置讲解五(const变量地址不在flash中)6.......