首页 > 技术文章 > 字符编码与网络编程初识

kailun-aixuexi 2020-12-10 18:10 原文

# 回顾

- 三层架构
- 平台的概念
- 计算机发展史
- 计算机硬件
- 进制数概念与运算
- 数据的概念
- 字符编码

# 今日内容概要

- 字符编码

(文件乱码?如何解决?)

- 网络编程

- 计算机远程通信

# 今日内容详细

## 字符编码

```python
前期知识准备
1.计算机只能识别0101的二进制数
2.而我们在使用计算机的时候却能用用我们人类的字符交互

eg:如果两个语言不通的人如何交流?
解决思路1:
统一一门公共的语言(世界通用语言:嘤语)
解决思路2:
翻译(字符编码)

```

## 字符编码发展史

```python
#字符编码表概念
1.计算机最先诞生于美国
但是计算机只认识二进制而美国人在使用的是英语
为了能够让计算机识别英语,必须发明一个英文字符与数字的对应关系
我们将记录该关系的表称为“字符编码表”

2.发展史(有点东西)
1.一家独大
老美一开始可没有考虑到其他国家的语言是否能够被计算机识别
只发明了英文字符与数字的对应关系(计算机一开始只支持英文)
记录了英文字母与数字对应关系最初的编码表ascll码表
该表中使用了几位二进制来表示一个英文字符呢?
00000000
ASCII码用了8位二进制来表示英文字符
所有的英文字符加起来不超过2的七次方(多出来的一位是为了后续发现新语言做准备,即留一手)
8bit=1bytes #一个英文字符就占一个字节的存储空间

2.群雄割据
随着时间的发展,其他国家的人也开始使用计算机
但是计算机只认识ASCLL码只认识英文
中国人
发明了一个有中文字符跟数字对应关系的编码表>>>:"GBK"
该表中记录了中文字符,英文字符与数字的对应关系
GBK针对英文字符还是用1bytes来储存
针对中文字符采用2bytes来存储,遇到生僻字还可能会使用跟多bytes来存储

日本人:Shift-JIS表

韩国人:Euc-Kr表

#群雄割据的局面导致了各个国家之间的计算机只认识自己的语言,无法跨国交流
如果在中国编写另一个文本编辑器基于网络
发给了日本的一台计算机,那么打开之后请你猜一猜会不会正常显示中文字符?
肯定不会!
解释:
在中国的计算机上面比那些一个文本文件使用的编码是GBK
01010101 我
到了日本的计算机上面采用的是shift-jis
01010101 花Q
类似用密码本A编码然后用密码本B解码肯定不对

 

3.天下一统
为了避免各个国家计算机之间语言不互通的情况
发明了另外一个编码"unicode"(万国码)
unicode编码
能够兼容所有国家的语言(该表中记录了所有国家的字符与数字的对应关系)

#目前计算机的内存里使用的就是unicode编码

unicode在存储数据的时候,所有的字符都是采用2bytes起步
会导致一个问题,如果一个文本里面全是英文占了100G(其它编码)
换成unicode之后存储空间增加了一倍
并且会导致读取和写入的时间也增加了一倍(致命缺点)

# 针对unicode在存储数据的时候回浪费空间和消耗更多的实际缺点
在将内存里面的unicode存储到硬盘的过程中对unicode进行优化处理
"utf-8"(uincode的转化版本)
将unicode中的英文用一个bytes存储
中文改用3bytes存储

总结:
计算机内存为了兼容玩过采用的是unicode编码
而硬盘里面为了减少存储空间和加载时间对unicode又做了交换
采用utf-8编码存储

###############################################
内存使用unicode编码-转换-硬盘使用utf-8
也就是意味着我们以后存储数据使用的编码都应该使用utf-8
###############################################


```

## 字符编码实际应用

```python
#乱码

乱码现象的产生
文件当初存稿的编码和文件打开的编码不一致导致
乱码现象的解决
文件当初用什么存,就用什么打开(多试几次呗)

常见编码
在中国很多windows默认的编码是GBK

```

## 网络编程

```python
计算机之间通信是如何一步步发展的
1.最早期实现远程通话的方式
滚筒想要沟通
你摇几下,然后接通接线员,跟接线员说你要找谁
之后接线员将你的电话线跟你想要沟通的人的电话线接起来
然后两人可以交流
2.大屁股电脑
必须要接一根网线

3.笔记本电脑
必须有一块网卡

无论是电话线,网线还是网卡都是物理连接介质
#计算机与计算机之间要想实现远程数据交互都必须有物理连接介质

计算机A要想和计算机B之间数据交互就必须2者互联,
但是如果计算机A降妖谱很多计算机交互,那么要在计算机A上弄很多借口吗?(马蜂窝)

交换机由此诞生
只要是连接了交换机的计算机,彼此之间实现了互联
#查看自己ip
ipconfig

局域网
一个个交互机组成的网络,称之为局域网
局域网的特点是在同一个局域网内的计算机可以彼此相互访问
但是处于不同局域网的计算机之间不能交互

广域网
有多个交换机(局域网)组成的网络,称之为广域网
其实就是我们经常说的“互联网”


基于局域网实现数据交互的特点
广播
所有人都是直接在交换机里面吼啊
所有练级交互机的计算机都能听到
单播
针对性的回复要找你的计算机
#广播风暴:所有的计算机同一时间都在交换机里面吼

mac地址
所有的计算机在出场的时候都必须有一块网卡并且该网卡上都必须有一个mac地址(一串数字编号)
mac地址相当于计算机的身份证号
基于局域网实现数据交互就是基于mac地址
#mac地址无法跨局域网传输

ip地址
规定了所有接入互联网的计算机都必须有一个ip地址(ip地址是动态变化的))
ip地址是可以上网的,跨局域网实现数据交互(点分十进制)
IPV4
0.0.0.0 最小
255.255.255.255 最大
IPV6
随着社会的发展,计算机越来越多
导致IPV4不够用了,所以发明了IPV6以备不时之需

#也就是说我们可以根据ip地址找到全世界独一无二的一台联了网的计算机

PORT端口号
根据端口号能够明确的找到一台计算机上面的某一个应用程序

ip+PORT
#能够找到一台连入互联网的计算机上的一个程序
1.一台计算机上面的端口号范围
0~65535(一台计算机最多能能够跑65526个应用程序)
2.端口号是动态分配的
当你启动qq之后比如给你分配一个1111端口号
当你关闭qq的时候1111端口或自动回收
当你再次打开qq的时候回重新分配一个端口号
#类似你去澡堂洗澡拿到的手牌号
3.一台计算机上同一时刻端口号不能同事给多个程序使用

```

 

## 作业

```python
1.用自己的话梳理字符编码的来龙去脉

字符编码源于人类语言与计算机(只认识二进制数)交互沟通的转换
为此而诞生了字符编码表

1.1 #ASCII码诞生
计算机诞生于美国
第一个字符编码表诞生于美国ASCII码
ASCII码是英文和二进制的对应转换
00000000 8个bit一个bytes表示一个英文字符

1.2 #多国自己的字符编码诞生

之后其它国家也编制了自己语言使用的编码表
如:中国的编码表GBK
2个以上bytes表示一个字符(千年历史文化的沉重)

1.3 #统一字符编码unicode和utf-8

但是发现了不同编码表导致了因不同编码无法正确正确读出其他国家的文件
为此出现了unicode编码(万国码)
即支持所有国家的字符编码表

但是unicode是使用2个bytes以上表示一个字符,极大的占用了存储空间
为此诞生了utf-8(创造源于需求)
规定了一个英文字符用一个bytes存储,一个中文字符用3个bytes存储
内存中时使用unicode编码,存储时转化为utf-8存储
```

补充

```python
typora插入图片
点击需要插入图片的位置,若是本地图片,则选择菜单栏上的:格式—>图像—>插入本地图片

Crtl+Shift+I 直接鼠标复制粘贴也行(所以我图个啥)
```

![K(YI[4[_AG`2T0AJ7]MU{`R](C:\Users\Administrator\Desktop\K(YI[4[_AG`2T0AJ7]MU{`R.jpg)

推荐阅读