Redian新闻
>
字符串实践常见问题总结

字符串实践常见问题总结

科技

最近发现很多小伙伴搞不清楚编码和解码,以及字符串前缀 f、r、u 、b 的区别和使用。那以下内容千万不要错过!

1 ASCII,Unicode,GBK和utf8

ASCII (American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,共定义了128 个字符 。

Unicode:统一码(又称万国码),它为每种语言中的每个字符设定了唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

GBK(“国标”、“扩展”汉语拼音的第一个字母):即汉字编码字符集,主要针对汉字编码而形成的解决方案。

UTF-8(8-bit Unicode Transformation Format):是针对 Unicode 的一种可变长度字符编码,包含全世界所有国家需要用到的字符,且与 ASCII 相容。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。

在 python 中,主要有两种类型的字符串类型,分别为 str 和 byte。其中,str 表示 Unicode 字符(ASCII 成者其他)。byte 表示二进制数据(包括编码的文本)。这两种类型的字符串不能拼接在-起使用,str 在计算机内存中需要以 Unicode 字符表示,一个字符对应若干个字节。但是,如果在网络上传输或者保存到磁盘中,需要把 str 转换为字节类型,即为 byte 类型。

2.str 和 byte 如何进行互相转化:

带有 b 前缀的字符串(单引号/双引号)是字节类型字符串,例如,b'\xd2\xb0'

2.1 str 转 byte

str 转 byte 称为编码的过程。使用 encode()方法,常用 utf-8 和 GBK 编码,示例如下:

str='人生苦短,我用 python!'
str1=str.encode('utf-8')
print(str1)
str='人生苦短,我用 python!'
str1=str.encode('GBK')
print(str1)

2.2 byte 转 str

称为解码的过程。使用 decode()方法,常用 utf-8 和 GBK 字符解码,示例如下:

str=b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8python\xef\xbc\x81'
str1=str.decode('utf-8')
print(str1)
str=b'\xc8\xcb\xc9\xfa\xbf\xe0\xb6\xcc\xa3\xac\xce\xd2\xd3\xc3python\xa3\xa1'
str1=str.decode('GBK')
print(str1)

3.字符串前缀 f、r、u 的作用:

3.1 字符串前缀 f

字符串前缀 f,这个语法只能在 Python3.6 以上版本才可以使用。使用参考如下格式,将需要输出的变量使用{}包括起来

num=0
print(f'输出{num}')

3.2 字符串前缀 r

字符串前缀 r 表明后面字符串以固定样式输出,拒绝特殊字符(如\n、\t、\b)等格式,忽略转义字符。使用参考如下格式,注意和没有前缀 r 输出的时候做个区别

print(r'\t人生苦短,我用python!\n')
print('\t人生苦短,我用python!\n')

3.3 字符串前缀 u

字符串前缀 u,表明后面字符串以 Unicode 格式进行编码,防止出现因编码格式不一致而导致的乱码。一般用在中文字符串前,但是并不局限中文字符串。注意和字符串前缀 b 的区别,以及 2.x 和 3.x 中 python 版本的不同

注:不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行。一般英文字符在使用各种编码下,,基本都可以正常解析, 所以一般不带 u。在 python2 中,普通字符串是以 8 位 ASCII 码进行存储的,而 Unicode 字符串则存储为 16 位 unicode 字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀 u。在 python3 中,所有的字符串都是 Unicode 字符串。

以下例子是 python3 中的用法,加 u 和不加 u 前缀的字符串是等价的,且都是 str 类型(在 python2 中字符串不加前缀和加前缀 b 字符串是等价的,都是 str 类型。因此如果你的项目是 python2 要兼容 python3 的话,需要在项目中将字符串加前缀 b)

print("abc")
print(u"abc")
print(b"abc")
print(type("abc"))
print(type(u"abc"))
print(type(b"abc"))


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
MySQL 字符串指南 | Linux 中国硬核观察 #867 因为百思买,Firefox 绕开了用户代理字符串中的版本号收藏| 从选校到入学,美国研究生申请常见问题必看清单!IPO在线解读:热门行业审核常见问题与侧重点汇总回美华人注意!1月5日美入境规则更新,附常见问题回答Java 近期新闻:JDK 19 和 Jakarta EE 10 发布、模板字符串、Payara 平台大彻大悟:5个人生哲理美国医生对新冠疫情中37个常见问题的回答关于德国“欧盟蓝卡”的常见问题解答运动产生多巴胺?从选校到入学,美国研究生申请常见问题必看清单!研究生第一篇科研论文常犯问题总结海外求职面试常见问题,解答思路大盘点(上)中國現在凴什麽在牛前阿里巴巴 P9 实践总结:如何画好架构图?| 极客时间入境美国必看!CDC发布赴美核酸检测要求及常见问题解答一文读懂字符编码【最新】沪2023年度城乡居民医保参保登记和个人缴费即日起开始受理,12月25日结束(附常见问答)下一个“嫖娼”的会是谁?海外亲属移民申请常见问题邮轮的岸上活动 shore excursions港股SPAC必读,港交所刊发16个常见问题赴美|赴华:美联航调整10月底-3月底班表,行程变了怎么办?附带回答今天买到了特特特价机票的常见问题纯干货,一篇文章弄懂留学生北京上海落户最新政策+常见问题美国国务院发言人普赖斯和气候变化问题总统特使克里表示……直播预告 | 10个活动,150个字符,如何靠AC List打动TOP30招生官?海外求职面试常见问题,解答思路大盘点(下)购房指南|英国置业常见问题解答和热门楼盘推荐!Prompt总结 | 从MLM预训任务到Prompt Learning原理解析与Zero-shot分类、NER简单实践普通人CV领域论文创新常见思路与方向总结常见心血管药物最佳服用时间表,一文总结!用AI让经典重新跳动,这个平台开放了3000万古籍字符在美国转学的常见问题美国移民申请最后一步,面试是常见问题及注意事项!大成高伙总结!商办物业房屋租赁的常见争议,都归纳好了!
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。