美文网首页
字符与字符串

字符与字符串

作者: 恒寄锦书来 | 来源:发表于2018-11-23 21:32 被阅读0次

搞清楚了ASCII、Unicode和UTF-8的关系,我们就可以总结一下现在计算机系统通用的字符编码工作方式:

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

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

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

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

由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。

Python对bytes类型的数据用带b前缀的单引号或双引号表示:

Python对bytes类型的数据用带b前缀的单引号或双引号表示:

x =b'ABC'

要注意区分'ABC'和b'ABC',前者是str,后者虽然内容显示得和前者一样,但bytes的每个字符都只占用一个字节。

以Unicode表示的str通过encode()方法可以编码为指定的bytes,例如:

>>> 'ABC'.encode('ascii')

b'ABC'

>>> '中文'.encode('utf-8')

b'\xe4\xb8\xad\xe6\x96\x87'

%d普通的整数输出;

-整数输出,整数的宽度是2位,若不足两位,左边补空格;

d整数输出,整数的宽度是2位,若不足两位,左边补0;

%.2d整数输出,整数的有效数字是2位。

>>> print('%2d-%02d' % (3, 1)

3-01

>>> print('%.2d' % 3.1415926)

03

>>> print('%.2f' % 3.1415926)

3.14

有些时候,字符串里面的%是一个普通字符怎么办?这个时候就需要转义,用%%来表示一个%:

>>> 'growth rate: %d %%'%7'growth rate: 7 %'

format()

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

>>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明',17.125)

'Hello, 小明, 成绩提升了 17.1%'

小明的成绩从去年的72分提升到了今年的85分,请计算小明成绩提升的百分点,并用字符串格式化显示出'xx.x%',只保留小数点后1位:

>>> s1=72

>>> s2=85

>>> r1=(s2-s1)/s1*100

>>> print('%.1f %%' % r1)

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

>>> len('ABC')3>>> len('中文')2

len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数:

>>> len(b'ABC')

3

>>> len(b'\xe4\xb8\xad\xe6\x96\x87')

6

>>> len('中文'.encode('utf-8'))

6

可见,1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节。

在操作字符串时,我们经常遇到str和bytes的互相转换。为了避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行转换。

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

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;

第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

相关文章

  • 2018-10-25

    字符串与数字: 数字与数字 字符串与boolean(真假类型) 字符串与字符串 数字与boolean(真假类型)

  • (三)C语言之字符串与字符串函数

    (三)C语言之字符串与字符串函数 字符串与字符串函数 1. 字符串 使用字符数组存储字符串,\0 表示结束符,字符...

  • iOS中的NSString与NSMutableString

    字符串的创建 字符串读写 字符串的比较 字符串的搜索 字符串截取 字符串替换 字符串与路径 字符串转换 NSMut...

  • 5.bytes和bytearray

    目录1.字符串与字节2.bytes3.bytearray 1.字符串与字节 1.1 字符串与bytes 字符串是字...

  • Python数据结构之字符串

    数据结构之字符串类型 本节知识体系 字符串语法 输入和输出 注释与长字符串 原始字符串 转义与转义字符 字符串的格...

  • 11.字符串:

    字符串替换: 字符串拼接和包含: 字符串分割: 字符串剪切: 字符串的大小写转换: 等号与字符串equals用法:

  • JavaScript的内置函数

    escape() 与 unescape() :对字符串进行 编码与解码 eval(字符串):用于执行字符串所代表的...

  • Swift string to array array to

    数组与字符串转换 Swift 字符串转数组: Swift 数组转字符串:

  • NSString

    1、字符串截取 2、字符串操作 3、字符串搜索 4、字符串的比较 5、字符串的读写 6、字符串与路径 参考文章iO...

  • Swift基础 - 字符串

    简单拼接 字符串遍历 字符串长度 格式化字符串 Swift字符串与OC中字符串对比 Swift中是String类型...

网友评论

      本文标题:字符与字符串

      本文链接:https://www.haomeiwen.com/subject/utfxqqtx.html