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