python3 三种字符串(无前缀,前缀u,前缀b)与encode()「建议收藏」

python3 三种字符串(无前缀,前缀u,前缀b)与encode()「建议收藏」假设读者已经了解了什么叫字符集,什么叫编码,什么叫解码。首先要明确,虽然有三种前缀(无前缀,前缀u,前缀b),但是字符串的类型只有两种(str,bytes),实验如下:根据程序以及以上运行结果,发现无前缀,和前缀u,构造出来的字符串常量,是一样的。类型一样是str,长度一样是3,==判断也是返回true。其实,这里是因为,python3中,字符串的存储方式都是以Unicode字符…

大家好,又见面了,我是你们的朋友全栈君。

假设读者已经了解了什么叫字符集,什么叫编码,什么叫解码。

首先要明确,虽然有三种前缀(无前缀,前缀u,前缀b),但是字符串的类型只有两种(str,bytes),实验如下:

python3 三种字符串(无前缀,前缀u,前缀b)与encode()「建议收藏」         python3 三种字符串(无前缀,前缀u,前缀b)与encode()「建议收藏」  python3 三种字符串(无前缀,前缀u,前缀b)与encode()「建议收藏」  python3 三种字符串(无前缀,前缀u,前缀b)与encode()「建议收藏」

根据程序以及以上运行结果,发现无前缀,和前缀u,构造出来的字符串常量,是一样的。

类型一样是str,长度一样是3,==判断也是返回true。is判断也是返回true。

其实,这里是因为,python3中,字符串的存储方式都是以Unicode字符来存储的,所以前缀带不带u,其实都一样。

结论:字符串常量,前缀带不带u,都是一样的

 

不管是utf-8,还是gbk,都可以理解为一种对应关系(若干个十六进制数<——>某个字符):

python3 三种字符串(无前缀,前缀u,前缀b)与encode()「建议收藏」      python3 三种字符串(无前缀,前缀u,前缀b)与encode()「建议收藏」

所以可以发现任何str类型的字符串,在经过encode(‘utf-8’)后,就是通过utf-8这种编码解码方式(两种方向),将Unicode字符转换为对应的以字节方式存储的若干十六进制数。

根据如上程序以及结果,可以发现,utf-8用三个字节(6个十六进制数)来表示一个中文字符,而gbk用两个字节(4个十六进制数)来表示一个中文字符。

结论:encode()函数根据括号内的编码方式,把str类型的字符串转换为bytes字符串,字符对应的若干十六进制数,根据编码方式决定

 

既然知道了,str实际存储的是Unicode字符,那么也可以Unicode编码来存储str,形如\u1234:

python3 三种字符串(无前缀,前缀u,前缀b)与encode()「建议收藏」发现\u后面跟四个十六进制数,就可以代表一个Unicode字符,同样的,前缀带不带u都一样。

python3 三种字符串(无前缀,前缀u,前缀b)与encode()「建议收藏」     python3 三种字符串(无前缀,前缀u,前缀b)与encode()「建议收藏」

结论:str类型的字符串,每个字符用字符本身或者\u1234,来表示都可以,后者则是直接是Unicode编码。但打印时都是打印字符本身

 

bytes字符串的组成形式,必须是十六进制数,或者ASCII字符:

python3 三种字符串(无前缀,前缀u,前缀b)与encode()「建议收藏」

提示错误:bytes只能包含ASCII字符。

python3 三种字符串(无前缀,前缀u,前缀b)与encode()「建议收藏」在打印bytes字符串时,某些正常字符和一些转义字符可以打印出来,比如:字母数字和‘\n’换行符。别的就只能以原来的方式存在。

python3 三种字符串(无前缀,前缀u,前缀b)与encode()「建议收藏」

还可以对bytes取索引,所以这里bytes也可以用for循环来迭代了,因为也是可迭代对象。

取索引,将所在元素的数,转换为十进制数。

代码:

oath = '我爱妞'
print(type(oath))
print(len(oath))

oath1 = u'我爱妞'
print(type(oath1))
print(len(oath1))

print(oath==oath1)


utf8 = oath.encode('utf-8')
print(type(utf8))
print(len(utf8))
print(utf8)

gbk = oath.encode('gbk')
print(type(gbk))
print(len(gbk))
print(gbk)


out = open('test.txt','w',encoding = 'utf-8')

test = u'\u5220\u9664'
print(len(test))
print(test)
test1 = test.encode('utf-8')
print(test1)
print(type(test1))

out.write(test)
out.close()

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137941.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月6日 上午9:04
下一篇 2022年5月6日 上午9:04


相关推荐

  • python批量下载网页图片_Python下载图片

    python批量下载网页图片_Python下载图片根据图片url。批量下载图片:importosimportrequestspath=os.getcwd()+’\\abc\\’#设置图片文件路径,前提是必须要有abc这个文件夹importpandasaspddf=pd.read_excel(‘url1.xlsx’)urls=df[‘url’]foriinrange(len(urls)):print(i)#url=’http://pic.qiushibaike.com/syste..

    2025年11月24日
    4
  • pyyaml使用_pam模块

    pyyaml使用_pam模块pyyaml模块

    2025年11月11日
    6
  • MSTP多区域生成树协议

    MSTP多区域生成树协议MSTP 简介多生成树协议 MSTP MultipleSpan 是 IEEE802 1s 中定义的生成树协议 通过生成多个生成树 来解决以太网环路问题 目的 在以太网中部署 MSTP 协议后可实现如下功能 形成多棵无环路的树 解决广播风暴并实现冗余备份 多棵生成树在 VLAN 间实现负载均衡 不同 VLAN 的流量按照不同的路径转发 MST

    2026年3月18日
    2
  • (修改gho文件办法)做属于自己个性的gho系统

    (修改gho文件办法)做属于自己个性的gho系统(修改gho文件办法)做属于自己个性的gho系统一修改GHO文件中的注册表:想要修改注册表首先要知道XP系统注册表存放的位置:WindowsXP的绝大部分注册表数据文件存放在C:\WINDOWS\system32\config。该目录里面包含了5个没有扩展名的文件,即当前注册表文件:  DEFAULT(默认注册表文件,位于注册表的HKEY_USERS项分支下…

    2022年7月12日
    37
  • gtest整理_softest

    gtest整理_softest目录简介使用目的使用时机使用方法测试样例使用心得简介gtest是一个跨平台的C++单元测试框架,由google公司发布。gtest提供了丰富的断言,供开发者对代码块进行白盒测试。使用目的测试代码逻辑是否正确。编译器只能检测出语法错误但是无法检测到逻辑错误,比如一个函数或类是否完成了期望的功能。单元测试可以帮助我们判断代码设计得是否清晰合理。一块代码的逻辑越清晰,它的单元测试就可以设计得越简单。方便并行开发。一个程序的有不同模块相互耦合,某个模块未完成可能影响其他已完成模块的测试,这时可以利用

    2026年4月16日
    6
  • matplotlib解决中文乱码问题,或者RuntimeWarning: Glyph 20154 missing from current font.

    matplotlib解决中文乱码问题,或者RuntimeWarning: Glyph 20154 missing from current font.

    2022年2月20日
    107

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号