字符编码

深入理解计算机系统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,无法理解英文、字母、汉字和其他特殊字符,这些字符需要经过编码才能成为计算机可以理解的二进制数。

字符编码--第2章 数的存储

我怕爱的太早我们不能终老 提交于 2020-03-01 22:45:42
第2章 数的存储 第1节 机器数 计算机中,表示数和数的符号的二进制数,叫做机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。那么,这里的 00000011 和 10000011 就是机器数。 机器数可用不同的码制来表示,常用的有原码、补码和反码表示法。 第2节 真值 因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。 例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1 第3节 有符号数处理 在计算机运算中,有符号数的表示需要将负数编码为二进制形式。在数学中,任意基数的负数都在最前面加上“−”符号来表示。然而在计算机硬件中,数字都以无符号的二进制形式表示,因此需要一种编码负号的方法。当前有四种方法,用于扩展二进制数字系统,来表示有符号数:原码(sign-and-magnitude),反码(ones' complement),补码(two's

字符编码--第1章 基础知识

北城以北 提交于 2020-03-01 16:50:38
第1章 基础知识 第1节 二进制 1. 二进制 1697年,德国数理哲学大师莱布尼兹发现二进制。基数为2,逢2进位的计数方法,0、1是它的基本数字符号。因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现,在电脑上普遍采用。除二进制(B)外,在电脑上常用的还有八进制(O)、十进制(D)和十六进制(H)等。 2.二进制转换为十进制   各位二进制数与其对应权值的乘积之和即为与该二进制相对应的十进制。 例: 110011.101B =25+24+21+20+2-1+2-3 =51.625D 3.十进制转换为二进制 降幂法:首先写出要转换的十进制数,其次写出所有小于此数的各位二进制权值,然后用要转换的十进制数减去与它最接近的二进制权值,如够减则减去并在相应位记以1;如不够减则在相应位记以0并跳过此位;如此不断重复,直到该数为0为止。 例:将十进制数117转换为二进制数计算过程如下: 小于117的二进制权为64 32 16 8 4 2 1 所以117的二进制为1110101。   除法:把要转换的十进制数的整数部分不断除以2,并记下余数,直到商为0为止。 例:将十进制数117转换为二进制数计算过程如下: 所以117的二进制为1110101。 计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。 第2节 位 位,英文名称是Bit,亦称二进制数位

java中字符与字节的编码关系

依然范特西╮ 提交于 2020-03-01 13:10:44
一个英文字母字符存储需要1个字节。在 GB 2312 编码或 GBK 编码中,一个 汉字 字符存储需要2个 字节 。 在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节。在UTF-16编码中,一个英文字母字符或一个汉字字符存储 都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。在UTF-32编码中,世界上任何字符的存储都需要4个字节。 其次还要知道一点常识,就是我们在记事本等一些文本工具中 写的都是字符,没有谁会去写字节(可以写字节,但是要用具特殊的编辑器), 但是其实,我们的写的是字符,但磁盘上真实存储的是字节。 这里就出现了转换的问题,当然,这些问题记事本本身会帮助我们解决。我们打开一个记事本,然后文件--另存为,你会发现有几种存储格式供您选择, ANSI格式:就是ascii的格式 Unicode格式:采用国际通用的编码存储 Unicode big endian格式:这个和unicode有点区别,但我也不明太具体的不同 UTF-8:采用utf-8存储,看过上面的两篇文章,你会十分的了解这里介绍的编码。Utf-8,是unicode的一种实现方式。 例如我们在记事本里面输入“连通”两个字。 1.我们另存记事本的时候,采用unicode存储,那么虽然我们看到的字符还是“连通”,但是其实存储在磁盘上的字节 确实 8FDE(连)

JAVA的字符编码及问题

做~自己de王妃 提交于 2020-02-29 22:15:50
  web开发时,字符编码及有时候也会是一个麻烦的问题,没有经验的话,肯定不知道怎么解决,有一定的经验的话,那还是比较简单的。以下,是我学习过程中总结出来的几种字符编码级问题和其解决的方法   1.文档乱码,JAVA文件的乱码,如果是在系统中打开,那应该是因为你的JAVA文件的字符编码及和系统的字符编码及不一致,用带转换功能的编辑器转化一下就好了,比如Notepad++就是一个你轻便的工具,建议大家使用。如果在eclipse中打开,那么可能是ecplise的编码及和与文件的编码及不一致,一般eclipse的初始化编码及是和系统保持一致的,在window下即GBK,可以设置eclipse相应的编码及解决问题,以下演示eclipse中解决字符编码及问题   控制台乱码,项目下右击--->Properties--->Resouce中设置编码级   文件乱码, 文件下右击--->Properties--->Resouce中设置编码级   有种简便的方法,更改eclipse的默认编码级配置   window---->Preference---->General---->Content Types 就可以看见你要设置的哪种类型(后缀)文件的默认编码级了,如果需要设置 JAVA源文件 和 JSP文件的默认编码级, Text--->Java Source File 下方Default

C# Encoding.GetEncoding 编码列表

依然范特西╮ 提交于 2020-02-29 22:14:03
原文: C# Encoding.GetEncoding 编码列表 代码页 名称 显示名称 37 IBM037 IBM EBCDIC(美国 - 加拿大) 437 IBM437 OEM 美国 500 IBM500 IBM EBCDIC(国际) 708 ASMO-708 阿拉伯字符 (ASMO 708) 720 DOS-720 阿拉伯字符 (DOS) 737 ibm737 希腊字符 (DOS) 775 ibm775 波罗的海字符 (DOS) 850 ibm850 西欧字符 (DOS) 852 ibm852 中欧字符 (DOS) 855 IBM855 OEM 西里尔语 857 ibm857 土耳其字符 (DOS) 858 IBM00858 OEM 多语言拉丁语 I 860 IBM860 葡萄牙语 (DOS) 861 ibm861 冰岛语 (DOS) 862 DOS-862 希伯来字符 (DOS) 863 IBM863 加拿大法语 (DOS) 864 IBM864 阿拉伯字符 (864) 865 IBM865 北欧字符 (DOS) 866 cp866 西里尔字符 (DOS) 869 ibm869 现代希腊字符 (DOS) 870 IBM870 IBM EBCDIC(多语言拉丁语 2) 874 windows-874 泰语 (Windows) 875 cp875 IBM EBCDIC

六、字符编码、文件

落花浮王杯 提交于 2020-02-29 19:44:48
一、字符编码 1. 计算机系统分为三层:   应用软件   操作系统   硬件 2. 文本编辑器读一个文件的三个过程:   1. 先启动文本编辑器   2. 文件编辑器会将文件内容读入内存   3. 将读入内存的内容显示到屏幕上 Cpython解释器执行一个py文件的三个过程:   1. 先启动python解释器   2. python解释器会将py文件的内容当中普通的文本内容读入内存   3. 开始解释执行刚刚读入内存的代码,识别python 3. 字符编码 字符编码指的是字符转换成/编码成数字 编码的过程一定要遵循一个标准,该标准称之为字符编码表 字符--------编码--------》数字 字符《--------解码--------数字 1. ASCII表:只能识别英文字符,用8bit对应一个英文字符   1个英文字符====>1Bytes 2. GBK表:可以识别中文字符、英文字符,用8bit对应一个英文字符,用16个bit对应一个中文字符     1个英文字符====>1Bytes     1个中文字符====>2Bytes 3. unicode(内存中默认使用该编码):用2Bytes表示一个字符   1. 可以识别万国字符   2. 与各种字符编码的二进制数字都有对应关系 4. utf-8全称Unicode Transformation Format:  

加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较

末鹿安然 提交于 2020-02-29 17:15:20
转载自:http://www.cnblogs.com/sochishun/p/7028056.html 加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用 加密技术通常分为两大类:"对称式"和"非对称式"。 对称性加密算法: 对称式加密就是加密和解密使用同一个密钥。信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行加解密了。对称加密算法用来对敏感数据等信息进行加密。 非对称算法: 非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为"公钥"和"私钥",它们两个必需配对使用,否则不能打开加密文件。发送双方A,B事先均生成一堆密匙,然后A将自己的公有密匙发送给B,B将自己的公有密匙发送给A,如果A要给B发送消 息,则先需要用B的公有密匙进行消息加密,然后发送给B端,此时B端再用自己的私有密匙进行消息解密,B向A发送消息时为同样的道理。 散列算法: 散列算法,又称哈希函数,是一种单向加密算法。在信息安全技术中,经常需要验证消息的完整性,散列(Hash)函数提供了这一服务,它对不同长度的输入消息,产生固定长度的输出。这个固定长度的输出称为原输入消息的"散列"或"消息摘要"(Message digest)。散列算法不算加密算法,因为其结果是不可逆的,既然是不可逆的,那么当然不是用来加密的,而是签名。 对称性加密算法有

jdk1.8新增Base64 api

我们两清 提交于 2020-02-29 12:23:20
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法,Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读 jdk1.8的java.util包中,新增了Base64的类 Base64.Decoder decoder = Base64.getDecoder(); Base64.Encoder encoder = Base64.getEncoder(); String text = "java新特性"; byte[] textByte = text.getBytes("UTF-8"); //编码 String encodedStr = encoder.encodeToString(textByte); System.out.println(encodedStr); //解码 System.out.println(new String(decoder.decode(encodedStr), "UTF8")); 来源: CSDN 作者: meihao3218 链接: https://blog.csdn.net/meihao3218/article/details/104570805

Base64编码及其作用

只愿长相守 提交于 2020-02-29 11:53:32
Base64编码的作用:由于某些系统中只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法。它使用下面表中所使用的字符与编码。 而且base64特别适合在http,mime协议下快速传输数据。 base64其实不是安全领域下的加密解密算法。虽然有时候经常看到所谓的base64加密解密。其实base64只能算是一个编码算法,对数据内容进行编码来适合传输。虽然base64编码过后原文也变成不能看到的字符格式,但是这种方式很初级,很简单。 来源: oschina 链接: https://my.oschina.net/u/436370/blog/663910