编码规则

Java的char是16位的unicode类型

守給你的承諾、 提交于 2020-03-26 09:51:31
Java的char是16位的unicode类型,中文也是,两个字节,但是如果用utf-8(一般系统默认)读取或者转换为字节数组,就会变成3个字节。 Unicode是字符集,UTF-8/UTF-16是编码规则,或者广义的Unicode就包括字符集和多种编码规则。也就是说字符集规定了每个字符的二进制代码,编码规则才规定了如何存储这些二进制代码。 然后utf-16有个大端序(Big Endian order)和小端序(Little Endian order)的问题(utf-8的更复杂,所以这也是最好不要在windows下编程的原因)。 在Java中,对于一个中文字符的char,getByte的结果,如果不指定编码规则,则 默认是UTF-8,一个中文3个字节 ,如果是 unicode或者utf-16,默认是4个字节,前两个字节0xFEFF表示大端序,0xFFEF表示小端序 ,如果 指定了utf-16be或者utf-16le,就是2个字节 , package IOTest; import javax.management.StandardEmitterMBean; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.nio.charset

网络管理与维护(2.1)网络数据表示ASH.1

∥☆過路亽.° 提交于 2020-03-17 02:00:45
开篇 前面的知识不再赘述了 抽象语法 数据类型在系统中物理上不存在, 系统不会也不需要为抽象语法分配内存 不同系统之间进行信息交换,各方可以约定使用的抽象与法定义数据类型 实际语法 C语言这类计算机语言描述数据类型的语法,内存中真实存在 ASN.1以一种独立于计算机架构和语言的方式来描述数据结构 为使各个系统间交换的信息具有相同的语义, 应用层 采用了相互继承的抽象语法 ASH.1简介 ASH.1标准分为两个部分 抽象语法 数据类型的ASH.1描述 传输语法 抽象语法在传输时的编码规则 编码规则:提供从抽象语法表示的数据到比特序列,以及其反向操作的方法 其所作都是在表示层 表示层负责在两个应用系统之间进行编码协商 发送发对内部的数据进行编码,使之形成适合于传输的比特序列 接收方进行解码,转化成原始数据 AQ:一个应用实体如何知道对等实体采用怎样的抽象语法和传输语法? 抽象语法/传输语法组合被称为 表示上下文(Presentation Context) 。通常,应用实体会用多个抽象语法/传输语法的组合关系 表示上下文 可以用 整数 标识,对于应用层的数据,表示层根据上下文标识,决定传输时应该采用的传输语法。 传输语法与抽象语法是多对多的关系 ASH.1已应用到信息处理系统和通信领域: 应用层网络协议的开发 视频会议系统 雷达系统 SNMP(重点) X.509 CSTA 3G/4G …

深入理解计算机系统cp1:存储单位与编码

我怕爱的太早我们不能终老 提交于 2020-03-01 23:54:58
摘要: 理解计算机是如何存储数据的。 原文: 深入理解计算机系统cp1:存储单位与编码 作者: Chor Fundebug 经授权转载,版权归原作者所有。 1. 存储单位 位:即 bit,表示二进制位,要么是 0 ,要么是 1。它是计算机内部数据存储的最小单位。比如 11010100 共有8个二进制位,是一个8位二进制数。 字节:即 byte,它由8个二进制位构成,即 1byte=8bit,是计算机内部计量的基本单位。一个英文字符占1个字节(8位),一个汉字占2个字节(16位) 字:即word,它由若干个字节构成,是计算机内部进行数据处理和运算的基本单位。字的总的位数称为字长,不同档次的计算机字长是不一样的,比如32位机,它的1个字由4个字节构成,字长为32位,也就是说其CPU一次操作处理的实际位数是32位。同理,64位机可以处理64位。由此可见,计算机的字长越大,其性能越优越。 KB,MB:1024byte = 1KB,1024KB = 1MB。往上还有GB,TB。 PS:数据传输大多以 bit 为单位,比如我们常说的网速100M/s,M/s其实Mbit/s,也就是兆比特每秒,我们还可以写成100Mbps。 2. 编码 2.1 为什么需要编码? 计算机只能理解0和1,无法理解英文、字母、汉字和其他特殊字符,这些字符需要经过编码才能成为计算机可以理解的二进制数。

NASA顶级程序员编程十大原则

谁都会走 提交于 2020-02-29 22:06:36
导读 引言: 你知道 NASA 顶级程序员如何编写关键任务代码么?为了确保代码更清楚、更安全、且更容易理解,NASA 的喷气推进实验室制定了 10 条编码规则。 NASA 的开发者是编程界最有挑战性的工作之一。他们编写代码并将开发安全的关键任务应用程序作为其主要关注点。 在这种情形下,遵守一些严格的编码规则是重要的。这些规则覆盖软件开发的多个方面,例如软件应该如何编码、应该使用哪些语言特性等。 尽管很难就一个好的编码标准达成共识,NASA 的喷气推进实验室(JPL)遵守一个编码规则,其名为“十的次方:开发安全的关键代码的规则”。 由于 JPL 长期使用 C 语言,这个规则主要是针对于 C 程序语言编写。但是这些规则也可以很容地应用到其它的程序语言。 该规则由 JPL 的首席科学家 Gerard J. Holzmann 制定,这些严格的编码规则主要是聚焦于安全。 NASA 的 10 条编写关键任务代码的规则: 1.限制所有代码为极为简单的控制流结构 — 不用 goto 语句、setjmp 或 longjmp 结构,不用间接或直接的递归调用。 2.所有循环必须有一个固定的上限值。必须可以被某个检测工具静态证实,该循环不能达到预置的迭代上限值。如果该上限值不能被静态证实,那么可以认为违背该原则。 3.在初始化后不要使用动态内存分配。 4.如果一个语句一行、一个声明一行的标准格式来参考

Base64

て烟熏妆下的殇ゞ 提交于 2020-01-23 03:49:34
文章目录 Base64 定义 产生原因 作用 使用场景 编码规则 常见问题 base64是加密算法? base64和UTF的区别? 参考文献 Base64 定义 将二进制文件转化为 ASCII码 中 可见 64个字符,即转换为可见文本。 产生原因 满足电子邮件中不能直接使用非ASCII码字符的规定。 作用 需要 将二进制文件通过 文本方式传输 时,避免原二进制文件的字符被特殊处理。 在大多数软硬件设备上,这64个字符 不会被特殊处理 ,从而实现 无错传输 。 使用场景 http的URL MIME格式的电子邮件 编码规则 base64的编码规则 常见问题 base64是加密算法? 严格来说Base64不能算是一种加密,只能说是编码转换。 base64和UTF的区别? base64将原本是二进制格式的文件(如图片)编码为ASCII码中的可见码,再被使用 UTF-8将原本为可见的文本转换为不可见的二进制数据,再被使用 参考文献 https://www.zhihu.com/question/36306744 为什么要使用base64编码,有哪些情景需求? http://www.ruanyifeng.com/blog/2008/06/base64.html base64笔记-阮一峰 https://juejin.im/post/5b7d50106fb9a019d7475785

UTF-8编码规则(转)

ⅰ亾dé卋堺 提交于 2019-12-21 01:11:45
UTF-8编码规则(转) UTF-8是Unicode的一种实现方式,也就是它的字节结构有特殊要求,所以我们说一个汉字的范围是0X4E00到0x9FA5,是指unicode值,至于放在utf-8的编码里去就是由三个字节来组织,所以可以看出unicode是给出一个字符的范围,定义了这个字是码值是多少,至于具体的实现方式可以有多种多样来实现。 UTF-8是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。 如表: 1字节 0xxxxxxx 2字节 110xxxxx 10xxxxxx 3字节 1110xxxx 10xxxxxx 10xxxxxx 4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 因此UTF-8中可以用来表示字符编码的实际位数最多有31位,即上表中x所表示的位。除去那些控制位(每字节开头的10等),这些x表示的位与UNICODE编码是一一对应的

字符编码与解码

大城市里の小女人 提交于 2019-12-09 21:50:08
最近遇到一个关于字符编码与解码的问题,使用GB2312保存了一个文件,然后使用vscode打开的时候,发现中文字符全是乱码了。为什么会出现这个问题?研究了一下编码与解码。 文件在计算机上存储的都是二进制。顾名思义,编码就是把一个字符编码成二进制码存起来的方式,而解码就是把这个二进制码按照原本编码的规则还原成原来的字符。 我们经常使用的ASCII码,是上个世纪60年代美国制定的一套字符编码,它规定了英语字符与二进制位之间的关系,一直沿用至今。ASCII 码一共规定了128个字符的编码。ASCII使用一个字节来进行编码,一个字节有8个bit位,ASCII只使用了后面的7个bit位,最前面的一个bit位使用0填充。 一些欧洲国家发现ASCII编码的128个字符不能表示他们的语言的所有的字符,所以他们决定启用最前面的一位,这样一来,就可以编码256个字符了,比以前又多了128个字符可以使用。 但是又有问题出现了,不同的国家的字母不一样,他们启用最高位来进行编码,不同的语言有不同的编码方式,导致了同样的编码在不同的国家代表的字符不一样;例如法语中130代表é,但是在希腊语中代表的是ג。注意由于各个国家都是在美国制定的标准上来扩充ASCII的,他们都保留了美国人制定的标准,也就是说所有的字符编码中,0-127表示的符号是一样的,128-256表示的符号在各个国家制定的编码表中是不一样的

Protobuf-数据编码规则

自古美人都是妖i 提交于 2019-12-03 09:08:45
参考文档: https://developers.google.cn/protocol-buffers/docs/encoding 文章是本人对官方文档的理解,可能理解有误,望指正。^^ 1.A Simple Message 简单消息格式 protobuf中的最简单的消息定义: message Test1 { optional int32 a = 1; } 如果将a赋值150,它的字节流(16进制表示)如下: 08 96 01 转换为二进制表示如下: 0 8 9 6 0 1 → 0000 1000 1001 0110 0000 0001 标志位 字段编号 字段类型 标志位 低位字段值 标志位 高位字段值 0 0001 000 1 0010110 0 0000001 protobuf都是以8bit(1byte)为一个解析单元。 标志位 0:表示解析单元结束,后一个字节是新的解析单元,1:表示解析单元未结束,后一个字节是这个解析单元的高位部分。 字段编号:protobuf的消息体的字段编号,如上所示,转换为十进制是1 字段类型:protobuf的消息体的字段类型,转换为十进制是0 字段类型对照表 类型值 类型名 使用场景 0 Varint int32, int64, uint32, uint64, sint32, sint64, bool, enum 1 64-bit fixed64,

身份证号码编码规则及校验位校验算法

限于喜欢 提交于 2019-12-02 06:02:02
一、身份证号码作为独一无二代表公民信息的号码,它的组成是由一下的数字表示的: (1)第1、2位数字表示:所在省(直辖市、自治区)的代码; (2)第3、4位数字表示:所在地级市(自治州)的代码; (3)第5、6位数字表示:所在区(县、自治县、县级市)的代码; (4)第7—14位数字表示:出生年、月、日; (5)第15、16位数字表示:所在地的派出所的代码; (6)第17位数字表示性别:奇数表示男性,偶数表示女性; (7)第18位数字是校检码:是根据《中华人民共和国国家标准GB 11643-1999》中有关公民身份号码的规定,根据精密的计算公式计算出来的。 二、校验码的计算方法: 1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2 ; 2、将这17位数字和系数相乘的结果相加; 3、用加出来和除以11,看余数是多少; 4、余数只可能有0、1、2、3、4、5、6、7、8、9、10这11个数字。其分别对应的最后一位身份证的号码为1、0、X、9、8、7、6、5、4、3、2,其中的X是罗马数字10; 5、通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ;如果余数是10,身份证的最后一位号码就是2 来源: https://blog.csdn.net/u011665991

深入理解计算机系统cp1:存储单位与编码

醉酒当歌 提交于 2019-11-30 05:23:21
摘要: 理解计算机是如何存储数据的。 原文: 深入理解计算机系统cp1:存储单位与编码 作者: Chor Fundebug 经授权转载,版权归原作者所有。 1. 存储单位 位:即 bit,表示二进制位,要么是 0 ,要么是 1。它是计算机内部数据存储的最小单位。比如 11010100 共有8个二进制位,是一个8位二进制数。 字节:即 byte,它由8个二进制位构成,即 1byte=8bit,是计算机内部计量的基本单位。一个英文字符占1个字节(8位),一个汉字占2个字节(16位) 字:即word,它由若干个字节构成,是计算机内部进行数据处理和运算的基本单位。字的总的位数称为字长,不同档次的计算机字长是不一样的,比如32位机,它的1个字由4个字节构成,字长为32位,也就是说其CPU一次操作处理的实际位数是32位。同理,64位机可以处理64位。由此可见,计算机的字长越大,其性能越优越。 KB,MB:1024byte = 1KB,1024KB = 1MB。往上还有GB,TB。 PS:数据传输大多以 bit 为单位,比如我们常说的网速100M/s,M/s其实Mbit/s,也就是兆比特每秒,我们还可以写成100Mbps。 2. 编码 2.1 为什么需要编码? 计算机只能理解0和1,无法理解英文、字母、汉字和其他特殊字符,这些字符需要经过编码才能成为计算机可以理解的二进制数。