当前位置: 首页 > news >正文

python学习-字符和编码

参考:廖雪峰官网https://www.liaoxuefeng.com/wiki/1016959663602400/1017075323632896

一、ASCII、Unicode、UTF-8的由来和关系

1、由来:因为计算机只识别数字,所以计算机的发明国家美国对大小写英文字母、数字以及一些特殊符号进行了编码,共127个,即ASCII编码表。

2、发展:因为ASCII编码不支持中文,所以中国制定了GB1312编码,韩国制定了Euc-kr、日本制定了Shift-JIS...

3、整合:世界上有上百种语言,使用各自的编码最终的结果就是乱码。因此Unicode编码出现了,Unicode支持所有的语言。也是计算机使用的编码。

4、优化:Unicode虽然支持所有的语言,解决了乱码问题,但是也有不足。无论是英文、中文字符,在Unicode编码下所占的存储空间都是2个字节(1个字节=8个比特,也就是十进制的255,二进制的11111111),而实际上,英文字符仅需要1个字节的存储空间,Unicode采取的方式是在二进制前填充0。例如:

字符"A"在ASCII编码中是65,二进制表示是1000001,而使用Unicode则表示为:00000000 01000001。这样,相当于占用了2个字节的存储空间。所以,utf-8出现了。utf-8把字符按不同的大小编码成1-6个字节,英文一般是1个,中文是3个字节,个别生辟字占用4-6个。

5、注意:计算机内存中统一使用Unicode,当需要保存到硬盘或者输出时,则转化为UTF-8。

二、学习

1、Unicode的ord()和chr()方法,#号后为输出。

ord("A") #65
ord("1") #49
ord("a") #97
ord("")#20013
chr(65) #A
chr(20013) #

 

2、字符转二进制

name = "中文"
for i in name:
    j = bytes(i,encoding = "utf-8")    #将字符转换为字节
    print("字符\"%s\"用二进制输出为:"%i)
    for m in j:
        n = bin(m)    #字节转为二进制
        print(n,end = " ") #以空格结尾
    print()

 

3、十进制转二进制

l = []
num =19
def a(num):
    if num < 0 :
        return "-"+a(abs(num))    #如果数字小于0,则在二进制数前添加负号返回,abs()返回绝对值
    while True:
        num,r = divmod(num,2)    #返回结果:num/2,num%2 = divmod(num,2),以19为例,依次返回结果(9,1)(4,1)(2,0)(1,0)(0,1),则r的值依次为11001,num=0时,循环结束。
        l.append(str(r))    #l列表依次追加11001,l = ["1","1","0","0","1"]
        print(l)  
        if num == 0:
            return "".join(l[::-1])  #l[::-1]是使用切片,::1将列表分成1等份,::2将列表分成2等份(奇数向上取整,例如5取3),加上负号就是倒置。::-1实际就是将列表倒置了。
                       #Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。也就是把倒置后的列表["1","0","0","1","1"]的5个字符生成为"10011"并返回。

4、对数字进行36进制内的转换

#网上copy的案例,分析下
def
baseN(num, b): return ((num == 0) and "0") or \  # (1)当num==0和"0",则直接返回0%b;(2)递归出口
 (baseN(num // b, b).lstrip("0") +\  #num != 0,则传入(num//b,b)继续调用baseN(),lstrip("0"),是去掉字符串内首个字符串的0字符。例如"00aa0 0xxa"使用方法后为"aa0 0xxa"
"0123456789abcdefghijklmnopqrstuvwxyz"[num % b]) #每次调用拼接取余值[num%b],"0123456789abcdefghijklmnopqrstuvwxyz"指定了[num%b]的取值范围,在本案例中
                                 #其实可以写为"01"[num%b],因为计算机转化为进制后只有0和1。
baseN(2,16)

5、占位符%和format()的使用

#占位符,等同于format()
print("%2d-%03d"%(3,10)) 
# 3-010 
#3前面有空格,因为未指定补充值
print("%3d-%03d"%(3,10)) 
#           3-010
#  %3d,在值前面生成2个空格
#  %03d,在个十位数前面填充0,显示为3位数
print("%d-%d"%(3,1))
#3-1
print("%.1f"%3)    #.1f就是保留小数点后1位,同理.2f就是保留两位
#3.0
print("%d%%"%7)  # %d是保留整数,%%显示为%
#7%

6、转义符\和r

#转义符\,在单引号或者双引号内需要使用引号时,在引号前添加转义符\
print('I\'m \"zhangchun1\"')
# I'm "zhangchun1"
print("I\'m \"zhangchun\"")
# I'm "zhangchun"
# \n与\t 代表换行和制表符,
print("I\'m \n\"zhangchun\"")
print("I\'m \t\"zhangchun\"")
# I'm 
# "zhangchun"
# I'm     "zhangchun"
#转义r,使用r时,则""内部默认不转义
print(r"I\'m \t\"zhangchun\"")
# I\'m \t\"zhangchun\"

 

 

 

 

 

转载于:https://www.cnblogs.com/zc-beyond/p/11071001.html

相关文章:

  • new Date() 在safari上遇到的问题
  • Linux安全加固
  • 解决打开IE报错“无法启动...丢失api-ms-win-core-path-l1-1-0.dll”的问题
  • 【JVM】符号引用和直接引用
  • Thread Future模式
  • 异常检测
  • monkey性能稳定性测试使用教程
  • [转]TCP和UDP
  • 换个语言学一下 Golang (2)——基础语法
  • 【转】SpringBoot 2.0.0新版和SpringBoot1.5.2版本中Tomcat配置的差别
  • CDH 安装的博客地址记录
  • firewalld 实现nat 转发外网转发到内网 实现访问外网端口到内网
  • 《A Survey on Transfer Learning》迁移学习研究综述 翻译
  • EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器软件正式环境安装部署攻略...
  • xinetd - 扩展的互联网服务守护进程
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 【css3】浏览器内核及其兼容性
  • ES6 学习笔记(一)let,const和解构赋值
  • JAVA之继承和多态
  • Linux下的乱码问题
  • Netty源码解析1-Buffer
  • Promise面试题,控制异步流程
  • Python中eval与exec的使用及区别
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • scrapy学习之路4(itemloder的使用)
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • tensorflow学习笔记3——MNIST应用篇
  • Web设计流程优化:网页效果图设计新思路
  • 给初学者:JavaScript 中数组操作注意点
  • 关于Java中分层中遇到的一些问题
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 蓝海存储开关机注意事项总结
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 前端设计模式
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • #define用法
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (算法)求1到1亿间的质数或素数
  • (五)网络优化与超参数选择--九五小庞
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)linux 命令大全
  • .gitignore
  • .htaccess 强制https 单独排除某个目录
  • .htaccess配置常用技巧
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET/C# 获取一个正在运行的进程的命令行参数