人人都能学会的python编程教程3:字符串和编码

字符串

在python3中已经全面支持中文。

由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

#!/usr/bin/env python3# -*- coding: utf-8 -*-

Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:

要计算str包含多少个字符,可以用len()函数:

在Python中,采用的格式化方式和C语言是一致的,用%实现,举例如下:

>>> 'Hi, %s, you have $%d.' % ('oldriver', 1000000)'Hi, oldriver, you have $1000000.'

占位符%d替换内容为整数,%f替换浮点数,%s替换字符串,%x替换十六进制整数。

>>> print('%2d-%02d' % (3, 1)) 3-01 >>> print('%.2f' % 3.1415926) 3.14

另一种格式化字符串的方法是使用字符串的format()方法,它会用传入的参数依次替换字符串内的占位符{0} 、{1}……,不过这种方式写起来比%要麻烦得多:

>>> 'Hello, {0}, 股价上升了 {1:.1f}%'.format('小刘', 17.125) 'Hello, 小刘, 股价上升了 17.1%'

编码

上期我们简单的解释过字符串这种数据类型,本期我们详细解释与字符串密切相关的字符编码。

在计算机的世界里所有的数据最终都会变成0和1。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母B的编码是66,小写字母y的编码是121。

但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312 编码,用来把中文编进去。你可以想得到的是,全世界有上百种语言,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。

因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。

Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。

现在,捋一捋ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节。

用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:

浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器:

今天的python教程就讲到这里,下期我们讲解python的list和tuple,敬请期待!

如果你想支持作者,只需点击关注按钮、转发文章即可。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏游戏开发那些事

【Unity游戏开发】浅谈Lua和C#中的闭包

  目前在Unity游戏开发中,比较流行的两种语言就是Lua和C#。通常的做法是:C#做些核心的功能和接口供Lua调用,Lua主要做些UI模块和一些业务逻辑。这...

25420
来自专栏web前端教室

积累下素材,明天要讲:javascript的变量和作用域

咱们的零基础前端课程,明天就要讲到js的作用域了,今晚先提前写一写,积累下素材。 说到作用域其实就是“非全局变量”能够工作的范围了,你定义这个变量时的区域有多大...

25050
来自专栏C/C++基础

C++中引用的本质

引用是C++引入的重要机制,它使原来在C中必须用指针实现的功能有了另一种实现的选择,在书写形式上更为简洁。那么引用的本质是什么,它与指针又有什么关系呢?

6610
来自专栏老九学堂

【超全】C语言初学者必须掌握的关键字!

其实小伙伴在写代码的时候,关键字还是用的比较多的,老九主要就平常中用到的常用关键字进行总结,便于小伙伴们更全面的理解其在代码中的意图。 C语言关键字总结 sta...

38460
来自专栏杨熹的专栏

Day 1-Java-imooc-2.变量常量

课程地址:http://www.imooc.com/learn/85 总结图片来自 http://www.imooc.com/article/10535 ? 本...

37750
来自专栏zaking's

用js来实现那些数据结构06(队列)

  其实队列跟栈有很多相似的地方,包括其中的一些方法和使用方式,只是队列使用了与栈完全不同的原则,栈是后进先出原则,而队列是先进先出(First In Firs...

34360
来自专栏数据结构与算法

32:行程长度编码

32:行程长度编码 总时间限制: 1000ms 内存限制: 65536kB描述 在数据压缩中,一个常用的途径是行程长度压缩。对于一个待压缩的字符串而言,我们可...

37260
来自专栏C语言及其他语言

实例说明

上一节,我们大致总揽了一个简单C程序的框架,程序如下: #include<stdio.h> /*引入头文件*/ int main(void) /*一个简单的C程...

29080
来自专栏每日一篇技术文章

Java_面向对象_04

面向对象是Java的核心,面向对象的核心是用人类解决问题的方法对复杂的客观问题进行分析,组织和解答,对于程序员而言,难点在于尽可能正确描述问题的抽象。面向对象的...

9130
来自专栏我的技术专栏

细说new与malloc的10点区别

18440

扫码关注云+社区

领取腾讯云代金券