首页 > 编程语言 >8天学习python笔记04

8天学习python笔记04

时间:2024-12-31 17:41:50浏览次数:1  
标签:1024 utf 字节 04 编码 python 笔记 二进制 unicode

day04 进制和编码

目标:了解一些常见名词背后的含义。

1.python代码运行方式

  • 脚本式
python3~ /PyCharm软件/学习Python/4.1.py

源文件上右键----点击run xx即可运行

  • 交互式
1、cmd进入命令行,输入python回车,即可进入交互式环境

2、输入print("hello world")回车,即可运行

3、输入exit()回车,即可退出交互式环境

2.进制

计算机中底层所有的数据都是以010101的形式存在(图片,文本,视频等)。

10进制:整型
2进制,8进制,16进制:字符串
v1 = bin(25)  # 十进制转换为二进制
print(v1)  # "0b11001"

v2 = oct(23)  # 十进制转换为八进制
print(v2)  # "0o27"

v3 = hex(28)  # 十进制转换为十六进制
print(v3)  # "0x1c"
i1 = int("0b11001", base=2)  # 25
i2 = int("0o27", base=8)  # 23
i3 = int("0x1c", base=16)  # 28
print(i1, i2, i3)

3.计算机中的单位

  • b(bit) 位
1,1位
10 ,2位
111, 3位
  • B (byte) 字节
8位 为一个字节。
10010110 ,1个字节
10010110 10010110 , 2个字节
  • KB(kilobyte) 千字节
1024个字节为  一个千字节。

10010110 10010110 10010110 ...,1KB
1KB = 1024B = 1024 * 8b
  • M (Megabyte) 兆
1024KB 就是 1M
1M = 1024KB = 1024 * 1024 * 8b
  • G (Gigabyte) 千兆
1024M 就是 1G
1G = 1024M = 1024 * 1024KB 
  • 还有更大的单位,TB,PB,EB,ZB,YB,BB,NB,DB
练习:
  • 假设1个汉字需要2个字节(2B=16位来表示,如: 1000101011001100), 那么1G流量可以通过网络传输多少汉字呢? (计算机传输本质上也是二进制)
1G = 1024M = 1024*1024KB = 1024*1024*1024 B
1个汉字需要2个字节
print(1024*1024*1024 / 2)
# 536870912.0
  • 假设1个汉字需要2个字节(2B=16位来表示,如: 1000101011001 100),那么500G硬盘可以存储多少个汉字?
print((1024*1024*1024 /2)*500)
# 268435456000.0

4.编码

编码,文字和二进制之间的一个对照表。

4.1 ASCII编码

规定使用1个字节来表示字母与二进制的对应关系。

https://c.biancheng.net/c/ascii/
4.2 gb-2312编码

gb-2312编码,由国家信息标准委员会制作(1980年)。

gbk编码,对gb2312进行扩展,包含了中日韩等文字(1995年)。

在与二进制做对应关系时,由如下逻辑:

  • 单字节表示,用一个字节表示对应关系。$$2^8= 256$$

  • 双字节表示,用两个字节表示对应关系。$$2^{16} = 65536$$中可能性。

4.3 unicode

unicode也被称为万国码,为全球的每个文字都分配了一个码位 (二进制表示)。

  • ucs2
用固定的2个字节去表示一个文字。

00000000 00000000  无
...

2^16 = 65535
  • ucs4
用固定的4个字节去表示一个文字。
00000000 00000000 00000000 00000000  无
... 
2^32 = 4294967296 

无论是ucs2还是ucs4都有缺点: 浪费空间

文字    十六进制    二进制
  A     0041      01000001
  A     0041      00000000 01000001 
  A     0041      00000000 00000000 00000000 01000001

unicode的应用:在文件存储和网络传输时,不会直接使用unicode,而在内存中会有unicode。

4.4 utf-8编码

包含所有文字和二进制的对应关系,全球应用最广泛的一种编码。

本质上:utf-8是对unicode的压缩,用尽量少的二进制去与文字进行对应。

unicode码位范围       utf-8
 0000 - 007F        用1个字节表示
 0080 - 07FF        用2个字节表示
 0800 - FFFF        用3个字节表示
10000 - 10FFFF      用4个字节表示

具体压缩的流程:

  • 第一步:选择转换模板
 码位范围(十六进制)           转换模板
 0000 - 007F        0xxxxxxx
 0080 - 07FF        110xxxxx 10xxxxxx
 0800 - FFFF        1110xxxx 10xxxxxx 10xxxxxx
10000 - 10FFFF      11110xxx 10xxxxxx 10xxxxxx 10xxxxxx  

例如:
对应的unicode:       选择模板:
"0042"              第一个模板
"01E3"              第二个模板
"6B66"              第三个模板
"9F50"              第三个模板
"1F606"             第四个模板

注意:一般 中文 都使用第三个模板(3个字节),这也就是平时大家说中文在utf-8中会占3个字节的原因。
  • 第二步:在模板中填入数据
-武 "6B66"  -> 110 101101 100110
- 根据模板去套入数据
  1110xxxx 10xxxxxx 10xxxxxx
  1110xxxx 10xxxxxx 10100110
  1110xxxx 10101101 10100110
  11100110 10101101 10100110
  
在UTF-8中 武"6B66" -> 11100110 10101101 10100110
4.5 Python相关的编码
字符串(str)    "alex"       unicode处理         一般在内存
字节(byte)     b'alex'     utf-8编码 or gbk编码 一般用于文件或网络处理
v1 = "武"
v2 = "武".encode("utf-8")  #b'\xe6\xad\xa6'
v3 = "武".encode("gbk")  #b'\xce\xe4'

将一个字符串写入到一个文件中。

str = "完成今日任务"
data = str.encode("utf-8")

# 打开一个文件
file_object = open("D:/PyCharm软件/学习Python/log.txt", mode="wb")
# 在文件中写内容
file_object.write(data)
# 关闭文件
file_object.close()

#log.txt显示
完成今日任务
总结

本章的知识点属于理解为主,了解这些基础之后有利于后面知识点的学习,接下来对本节所有的知识点进行归纳总结:

  1. 计算机上所有的东西最终都会转换成为二进制再去运行。

  2. ascii编码、unicode字符集、 utf-8编码本质上都是字符与二进制的关系。

    • ascii, 字符和二进制的对照表。
    • unicode, 字符和二进制(码位)的对照表。
    • utf-8, 对unicode字符 集的码位进行压缩处理,间接也维护了字符和二进制的对照表。
  3. ucs2和ucs4指的是使用多少个字节来表示unicode字符集的码位。

  4. 目前最广泛的编码为: utf-8, 他可以表示所有的字符 且存储或网络传输也不会浪费资源 (对码位进行压缩了)。

  5. 二进制、八进制、十进制、十六进制其实就是进位的时机不同。

  6. 基于Python实现二进制、八进制、十进制、十六进制之间的转换。

  7. 一个字节8位。

  8. 计算机中常见单位b/B/KB/M/G的关系。

  9. 汉字,用gbk编码需要用2个字节;用utf-8编码需要用3个字节。

  10. 基于Python实现将字符串转换为字节(utf-8编码)

    # 字符串类型
    name = "佩奇"
    print(name)  # 佩奇
    # 字符串转换为字节类型
    data = name.encode("utf-8")
    print(data)  # b'\xe4\xbd\xa9\xe5\xa5\x87'  utf8,中文3个字节
    
    # 把字节转换为字符串
    old = data.decode("utf-8")
    print(old)  # 佩奇
    
  11. 基于Python实现将字符串转换为字节(gbk编码)

    # 字符串类型
    name = "佩奇"
    print(name)  # 佩奇
    # 字符串转换为字节类型
    data = name.encode("gbk")
    print(data)  # b'\xc5\xe5\xc6\xe6'  gbk,中文2个字节
    
    # 把字节转换为字符串
    old = data.decode("gbk")
    print(old)  # 佩奇
    
    

标签:1024,utf,字节,04,编码,python,笔记,二进制,unicode
From: https://www.cnblogs.com/LYcnbky/p/18644531

相关文章

  • 沉淀中,由于翻译校对太花时间,所以更多的还是做个人精简版笔记,THM博客留着慢慢填坑&如需
    对于无法直接发布或者较敏感的文章,将使用密码保护机制。博客主页的背景图片可能需要挂载VPN工具才能成功刷新。⭐需要PDF版THM笔记的可以加一下下面的知识星球,主要包含个人校对的TryHackMe中文笔记PDF版、闲鱼购买的SRC教程、网上白嫖的一些学习资源。......
  • 中考英语优秀范文-004 Who is your favourite movie star? 你最喜欢的电影明星是谁?
    中考英语优秀范文-004Whoisyourfavouritemoviestar?你最喜欢的电影明星是谁?1写作要求请根据以下提示信息以Myfavouritemoviestar为题,用英语写一篇80词左右的短文,可适当发挥。提示信息:Whoisyourfavouritemoviestar?Whatdoesheorshelooklike?Whatdoyo......
  • Python毕业设计项目 在线组团拼团购物商城系统_9pd36
    文章目录开发技术介绍具体实现截图开发技术设计思路系统测试核心代码部分展示文章目录/写作提纲参考开发与测试:源码/演示视频获取方式开发技术介绍(1)确定项目名称、项目研究内容,开题报告提交及修改。(2)项目开发准备,整理思路,查阅相关资料了解系统的研究意义。(3)项目初......
  • Python+Django智慧农业小程序(Pycharm Flask Django Vue mysql)
    收藏关注不迷路,防止下次找不到!文章末尾有惊喜项目介绍当今社会已经步入了科学技术进步和经济社会快速发展的新时期,国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统智慧农业采取了人工的管......
  • Python函数(十三):变量的作用域、匿名函数
    前言:在Python中,变量的作用域是一个至关重要的概念,它关系到变量在程序中的可访问性。理解局部变量(LocalVariable)和全局变量(GlobalVariable)的区别,以及它们如何在不同函数和代码块中被识别和使用,对于编写清晰、可维护的代码至关重要。局部变量限制在定义它们的函数或代码块内,而全......
  • 【Python3教程】Python3基础篇之Bool(布尔类型)
    博主介绍:✌全网粉丝22W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。感兴趣的可以先......
  • 【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
    本文内容来自YashanDB官网,原文内容请见https://www.yashandb.com/newsinfo/7849012.html?templateId=1718516【标题】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断【关键字】python驱动,gbk服务端,崖山数据库【问题描述】使用python驱动查询gbk字符集数据库,数据被......
  • 题解:CF2044C Hard Problem
    CF2044CHardProblem思路先让那\(a+b\)个学生入座,记第一、二排分别入座了\(num1,num2\)个学生。容易想到最终答案为\(2\cdotm\)和\(num1+num2+c\)取最小值。(注:\(2\cdotm\)为所有座位均坐满,\(num1+num2+c\)为所有学生均有位置)AC代码#include<bits/stdc++.h>using......
  • 2024秋季学期 复变函数A期末复习笔记
    基础知识级数展开留数定理保形变换拉氏变换......
  • 【论文阅读笔记】SCI算法与代码 | 低照度图像增强 | 2022.4.21
    目录一SCI1SCI网络结构核心代码(model.py)2SCI损失函数核心代码(loss.py)3实验二SCI效果1下载代码2运行一SCI......