最早的编码为ASCII码(包含0-9、A-Z、a-z、符号(空格、制表符等)),最多支持256个符号(每个符号占1字节)
GBK/GB2312:我国制定的中文编码标准,一个字节表示因为字母,两个字节表示中文字符
UTF-8编码:国际通用编码,一个字节表示英文字符,三个字节表示中文
Python中常用字符串类型:
str:使用Unicode字符(一个字符代表若干个字节)
eg:“拼搏到感动自己”
bytes:二进制数据,是带有b成对的字符串(用“”或‘’表示)
eg:b'\xd2\xb0'和b'mr'
str和bytes不能拼接在一起使用,str要存放在磁盘或者在网络上传输,需要把str转换层bytes
使用encode()方法转换层bytes
一、字符串编码转换:str.encode([endoding="utf-8"][,errors= "strict"])
      • str:字符串名
      • endoding="utf-8"(可选参数):指定编码时使用的编码
        • 默认使用utf-8,当只有这一个参数时,可以省略的携程utf-8)
        • 如果要设置问简体中文,可设置为GB2312
      • errors= "strict"(可选参数):指定错误处理方式
        • strict:遇到异常立即抛出错误(默认值)
        • ignore:忽略非法字符
        • replace:用?替换异常错误
        • xmlcharrefreplace:使用xml字符的引用
eg:str1 = "野渡无人舟自横"
byte = str1.encode("utf-8")
byte1 = str1.encode("GBK")
print(str1)
print(byte)
二、使用decode()方法解码:str.decode([encoding="utf-8"][,errors="strict"])
可选同encode一样
news = byte.decode("utf-8")
解码时的,指定编码时需要和转码时指定的编码方式需要一致
三、字符串常用操作
单引号、双引号、三引号都是标示字符串的(单引号和双引号必须写在一行上,三引号可以写在多行上)
  • 拼接字符串:序列相加,把多个字符串相加,拼成一个字符串(字符串不允许直接与其他数据类型拼接)
eg:str1 = "我今天一共走了"
num = 17890
str2 = "步"
print(str1 + str(num) + str2)
eg:str1 = "程序员甲:搞IT太辛苦了,我想换行…怎么办?"
str2 = "程序员乙:敲一下回车键"
print(str1 + "\n" + str2)
  • 计算字符串的长度:使用len(string) #不管多少个字,都按照一个字符串来计算
      • 指一个字符串所占的字节数(英文字母、数字、下划线等占1字节,中文汉字占2-4个字节)
      • 不通的编码方式,得出的结果可能会不一样
eg:str1 = "人生苦短,我用Python"
print(len(str1))
print(len(str1.encode())) #计算使用utf-8编码的长度
print(len(str1.encode("gbk")))
四、截取字符串:其实就是切片方法
  • 字符串的索引:从左到右依次增加(从0开始)
str2 = str1[2] #获取第二个字符串(获取指定位置的值)
str3 = str1[2:] #获取第二个字符串到末尾的字符串
str4 = str1[:5] #获取左边5个字符串
str5 = str1[2::2] #获取步长为2,开始位置为2的的值
  • 获取切片的位置不存在时,抛出一个空值,获取的指定索引值不存在时,或抛出错误代码(可以用try…except捕获错误,后续会讲到)
idcard = "123456199006277890"
birthday = idcard[6:10]+ "年" + idcard[10:12] + "月" + idcard[12:14] + "日"
print("出生日期为:" + birthday + ",生日为:" + birthday[5:])
  • 分割字符串:listname = str.split(sep,maxsplit) ---splist方法
listname:返回的值 str:被切分的对象
sep:指定分隔符(可包含多个字符,默认为空白符None(空格、换行、制表符、\t等))
maxsplit:指定分割次数(不指定该参数或者为-1时,则分割次数没有限制;否则返回结果列表的元素个数最多为maxsplit+1;要指定maxsplit必须指定sep)
eg:a = "你 有 多 自信, \n 世界 就有 多 相信你!"
print(a.split())
print(a.split(" "))
print(a.split(" "))
print(a.split(" ",5))
print(a.split("\n"))
eg:a = "@明日科技 @扎克伯格 @俞敏洪 @勤奋的天使"
b = a.split(" ") #空格做分隔符
for i in b:
print(i[1:]) #去掉@符号显示
  • 合并字符串:strnew = string.join(iterable) ---join方法
strnew:接收返回的值
string:合并时的分隔符
iterable:可迭代对象(可以是列表,可以是元组)
eg:a = ["明日科技","扎克伯格","俞敏洪","勤奋的天使"]
b = " @".join(a) #用空格和@进行连接
print("@"+b)
五、检索字符串count(),find(),index(),startswith(),endswith()
count():检测字符串出现的次数:str.count(sub[,start[,end]])
str:表示原字符串
sub:表示要检索的子字符串
start:可选参数,表示检索范围的起始位置(不指定,就从头开始)
end:可选参数,表示检索范围的结束为止(不指定,则到结尾)
eg:a = "@明日科技 @扎克伯格 @俞敏洪 @勤奋的天使"
print(a.count("@"))
find():str.find(sub[,start[,end]])
方法用于检索是否包含指定的子字符串,检索字符串不存在,则返回-1,否则返回首次出现的索引值
eg:a = "@明日科技 @扎克伯格 @俞敏洪 @勤奋的天使"
print(a.find("@"))
index():str.index(sub[,start[,end]])
和find方法类似,检索字符串不存在,则返回-1,否则返回首次出现的索引值,只是当index方法检索的字符串不存在时会抛出异常
startswith():str.startswith(sub[,start[,end]])
用于检索字符串是否以指定字符串开头,如果是这返回True,否则返回False
endswith():str.endswith(sub[,start[,end]])
用于检索字符串是否以指定字符串结尾,如果是这返回True,否则返回False
六、字母的大小写转换
  • lower():将字符串中全部大写字母转换为小写字母(如无被转换字符,则返回原值,否则返回新值):str.lower()
  • upper():将字符串的全部小写字母转换为大写字母(如无被转换字符,则返回原值,否则返回新值):str.upper()
eg:username_1 = '|MingRi|mr|mingrisoft|WGH|MRSoft|' # 假设已经注册的会员名称保存在一个字符串中,以|进行分隔
username_2 =username_1.lower() # 将会员名称字符串转换为全部小写
regname_1 = input('输入要注册的会员名称:')
regname_2 = '|' + regname_1.lower() + '|' # 将要注册的会员名称也转换为全部小写
if regname_2 in username_2: # 判断输入的会员名称是否存在
print('会员名',regname_1,'已经存在!')
else:
print('会员名',regname_1,'可以注册!')
七、去除字符串中的空格和特殊字符:(特殊字符指:制表符\t,回车符\r、换行符\n等)
strip():用于去掉字符串左右两侧的空格和和特殊字符串:str.strip([chars])
str:要去除的字符串名
chars:可选参数,用于指定要去除的字符,可以指定多个(不指定时,默认去除空格、制表符、回车符、换行等)
lstript():用于去掉字符串左侧的空格和特殊字符串:str.lstrip([chars])
rstript():用于去掉字符串右侧的空格和特殊字符串:str.rstrip([chars])
八、格式化字符串:
格式化字符串的意思是先指定一个模板,在这个模板中预留几个空位,再根据需要填写相应的内容(这些空位需要通过指定的符号标记(也称占位符),而这些符号还不会显示出来)
  • 使用%操作符(早期版本):定义模板:‘%[-][+][0][m][.n]格式化符号'%exp
    • -:可选参数,用于指定左对齐,正数前方无符号,负数前面加负号
    • +:可选参数,用于指定右对齐,正数前方无符号,负数前面加负号
    • 0:可选参数,表示右对齐,正数前方元符号,负数前面加负号,用0填充空白处(一般与m参数一起使用)
    • m:可选参数,表示占有宽度
    • .n:可选参数,表示小数点后保留的位数
    • exp:要转换的项(如果要指定的项有多个,需要以元组的形式指定)
    • 格式化符号:主要有s、d、c、e、g、b、o、x、f、 %
eg:template = '编号:%09d\t公司名称:%s \t 官网:http://www.%s.com' #定义模板
item = (7,'百度','baidu') #定义要转换的内容
print(template%item)
常用格式化字符:
s:字符串(采用str()显示) c:单个字符
d或者i:十进制整数 x:十六进制整数
f或F:浮点数 r:字符串(采用repr()表示)
o:八进制整数 e:指数(基底写为e)
E:指数(基底写为E) %:字符%
  • 使用format()方法(新版本,常用):str.format(args)
---str用于指定字符串的显示样式(模板),args用于指定要转换的项(有多项时,用“,”隔开)
创建模板:创建模板时,需要使用{}和:指定占位符,基本语法格式如下:
{[index][:[[fill]align][sign][#][width][.precision][type]]}
        • index:可选,指定要设置哥还是的对象在参数列表中的索引位置(从0开始,不指定则根据值得先后顺序自动分配)
        • fill:可选,用于指定空白处填充的字符
        • align:可选,用于指定对其方式(<表示内容左对齐;>表示内容右对齐;=表示内容右对齐,并将符号放在填充内容的最左侧,且只对数字类型有效;值为^表示内容居中,需要配合width使用)
        • sign:可选,用于指定有无符号数(+表示正数加正号,负数加负号;-表示正数不变,负数加负号;值为空格表示正数加空格,负数加负号)
        • #:可选参数,对于耳机子、八进制、十六进制,如果加上#号,表示会显示0b/0o/0x前缀,否则不显示
        • width:可选,指定所占宽度
        • .precision:可选,用于指定保留的小数位数
        • type:可选参数,指定要格式化的数据类型
常用格式化字符:
s:对字符串类型格式化 d:十进制整数
c:将十进制整数自动转换为对应的Unicode字符
e或E:转换为科学计数法表示再格式化
g或G:自动在e和f或E或F中切换
b:将十进制整数自动转换为二进制表示再格式化
o:将十进制整数自动转换为八进制表示在格式化
x或X:将是金子整数自动转换成十六进制表示再格式化
f或F:转换为浮点数(默认小数保留6为)再格式化
%:显示百分比(默认显示小数点后六位)
eg:template = '编号:{:0>9s}\t公司名称:{:s} \t官网:http://www.{:s}.com'
context1 = template.format("7","百度","baidu")
print(context1)
eg:import math #导入数学模块
print("以货币形式显示:¥{:,.2f}元".format(1251+3950)) #以货币形式显示
print("{0:.1f}用科学计数法表示:{0:E}".format(12000.1)) #以科学计数法表示
print("π取5位小数:{:.5f}".format(math.pi)) #输出小数点后5位
print("{0:d}的十六进制是:{0:#x}".format(100)) #十六进制显示
print("天才是有{:.0%}的灵感,加上{:.0%}的汗水。".format(0.01,0.99))

六、Python-字符串编码的更多相关文章

  1. python 字符串编码

    通过字符串的decode和encode方法 1 encode([encoding,[errors]]) #其中encoding可以有多种值,比如gb2312 gbk gb18030 bz2 zlib ...

  2. 不得不知道的Python字符串编码相关的知识

    开发经常会遇到各种字符串编码的问题,例如报错SyntaxError: Non-ASCII character 'ascii' codec can't encode characters in posi ...

  3. python字符串编码理解(转载)

    (转载)字符编码和python使用encode,decode转换utf-8, gbk, gb2312 (http://www.cnblogs.com/jxzheng/p/5186490.html) A ...

  4. 【转载】不得不知道的Python字符串编码相关的知识

    原文地址:http://www.cnblogs.com/Xjng/p/5093905.html 开发经常会遇到各种字符串编码的问题,例如报错SyntaxError: Non-ASCII charact ...

  5. python字符串编码

    python默认编码 python 2.x默认的字符编码是ASCII,默认的文件编码也是ASCII. python 3.x默认的字符编码是unicode,默认的文件编码是utf-8. 中文乱码问题 无 ...

  6. Python字符串编码——Unicode

    ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte).也就是 ...

  7. Python字符串编码问题

    编码问题:Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了. ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节.字母A用ASC ...

  8. python 字符串编码 ,区别 utf-8 和utf-8-sig

    Python 读取文件首行多了"\ufeff"字符串 python读取B.txt文件时,控制台打印首行正常,但是若是用首行内容打开文本的话,就会报错: Traceback (mos ...

  9. Python字符串编码转换

    使用encode()方法编码 str.encode([encoding="utf-8"][,errors="strict"]) str:表示需要转换的字符串 e ...

  10. python 字符串编码转换

    import chardetdef CheckCode(filename): adchar=chardet.detect(filename) if adchar['encoding']=='utf-8 ...

随机推荐

  1. JavaScript权威指南--数组Array

    什么是数组 数组是值的有序集合.每一个值叫做元素,每一个元素在数组中有一个位置,用数字表示,称为索引.js数组是无类型的.动态的,也可能是稀疏的.每个数组都有length属性.数组最大能容纳42949 ...

  2. 个性化自己的DOS窗口

    就是为了好看吧,感觉没啥大用 ============= 首先创建一个文本,写下如下命令 @echo off color D echo ======================== echo == ...

  3. Devexpress之LayoutControl的使用及其控件布局设计

    引言 Devexpress给我们提供了更加美观.更加丰富控件,但在学习和使用的同时经常会遇到诸多麻烦.今天在使用Devexpress的LayoutControl控件进行界面控件的布局设计时遇到了如下的 ...

  4. centos7 升级openssh到openssh-8.0p1版本

    环境介绍 centos7.3和centos7.6升级完毕测试登录ssh以及重启后登录ssh均无问题. 前期请自行配置好yum源(如果不会请百度) 整个过程不需要卸载原先的openssl包和openss ...

  5. winscp工具和xshell连接linux机器时切换到root账户

    由于工作中一些机器不能以root直接登陆(sshd_config配置了不能直接root登陆),但是又想连接的时候切换为root用户 处理方式 1.给普通用户sudo su - 权限 命令行输入visu ...

  6. 20165308『网络对抗技术』Exp5 MSF基础应用

    20165308『网络对抗技术』Exp5 MSF基础应用 一.原理与实践说明 实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 一个主动攻击实 ...

  7. github-上传自己的项目到github仓库

    参考链接: https://blog.csdn.net/m0_37725003/article/details/80904824 https://www.cnblogs.com/cxk1995/p/5 ...

  8. FPGA Asynchronous FIFO设计思路

    FPGA Asynchronous FIFO设计思路 将一个多位宽,且在不停变化的数据从一个时钟域传递到另一个时钟域是比较困难的. 同步FIFO的指针比较好确定,当FIFO counter达到上限值时 ...

  9. SSHD启动失败,错误码255

    查看/etc/ssh/sshd_config 发现,Listen Address并不是我想要的ip,将其注释掉 sshd restart,结果返回 Permission denied (publick ...

  10. Delphi编译选项

    编译选项的设置,称为“开关指令”,其中大部分值为布尔类型 一.代码生成(Code generation)1.Optimization  优化代码,默认true2.Stack frames  生成过程/ ...