python学习—字符编码

例如汉字“中”

十进制:20013

二进制:01001110 00101101(unicode)/11100100 10111000 10101101(utf-8)

十六进制:u4e2d

八进制:

ascii

  • ASCII编码是1个字节
  • 只能编码纯英文
  • 节省空间

unicode

  • Unicode编码通常是2个字节。(比如字母A用ASCII编码是十进制的65,二进制的01000001;A的Unicode编码是00000000 01000001。)
  • uicode统一编码,解决编码冲突,乱码问题消失
  • 比ascii多一倍的存储空间,存储和传送时不划算(UTF-8解决)

utf-8(可变长的unicode编码)

UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。

字符

ASCII

Unicode

UTF-8

A

01000001

00000000 01000001

01000001

x

01001110 00101101

11100100 10111000 10101101

  • 如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间:
  • ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。

计算机系统通用的字符编码工作方式

内存:统一unicode编码

硬盘、传输:转换为utf-8

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

Python的字符串

相关函数

  • ord()函数获取字符的整数表示(单个字符)参数为要操作的单个字符,返回一个整数。
  • chr()函数把编码转换为对应的字符(单个字符)
  • encode()函数,将str字符串以指定的编码方式(参数)变为bytes

'str'.encode(ascii/utf-8)返回bytes字符串

中文以ascii编码会报错

  • decode()函数把从网络或磁盘上读取的bytes以指定的编码方式(参数)变为str

'bytes'.decode(ascii/utf-8)返回str字符串

bytes无法解码会报错,如果bytes中只有一小部分无效的字节,可以传入errors='ignore'忽略错误的字节

>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore') '中'

  • len()函数,计算字符串包含字符个数

>>> len(b'ABC') 3 >>> len(b'\xe4\xb8\xad\xe6\x96\x87') 6 >>> len('中文'.encode('utf-8')) 6

在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言

Python的字符串类型是str,如果要在网络上传输,或者保存到磁盘上,就需要把str变为bytes。

>>为了避免乱码问题,应当始终坚持使用UTF-8编码对strbytes进行转换<<

str和bytes的区别

  • str一个字符对应若干个字节,但bytes的每个字符都只占用一个字节。(将多字节的字符分解为单字节的多字符)

>>> 'ABC'.encode('ascii') b'ABC' >>> '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87'

在bytes中,无法显示为ASCII字符的字节,用\x##显示。

  • bytes字符带前缀,带引号

.py文件中含中文要用utf-8编码

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

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

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

>>编辑器用UTF-8 without BOM<<

字符串格式化问题

>>> 'Hello, %s' % 'world' 'Hello, world' >>> 'Hi, %s, you have $%d.' % ('Michael', 1000000) 'Hi, Michael, you have $1000000.'

%运算符

  • 就是用来格式化字符串的。在字符串内部有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。
  • 转义,用%%来表示一个%

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

占位符

替换内容

%d

整数

%f

浮点数

%s

字符串

%x

十六进制整数

format()

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

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

字符编码——python学习的更多相关文章

  1. Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 format函数字符串格式化 帮助

    Python第二天  变量  运算符与表达式  input()与raw_input()区别  字符编码  python转义符  字符串格式化  format函数字符串格式化  帮助 目录 Pychar ...

  2. 员工管理系统+字符编码+Python代码文件操作

    员工管理系统+字符编码+Python代码文件操作 1.员工管理系统 1.1  debug 代码调试 1.先使用鼠标左键在需要调试的代码左边点击一下(会出现一个红点)2.之后右键点击debug运行代码 ...

  3. Python学习-字符编码, 数据类型

    本篇主要内容: 字符编码 Python中的数据类型有哪些 类型的一些常用操作及方法 一.字符编码 编码解释的大部分内容摘自廖雪峰老师教程中的讲解,点击跳转. 简单介绍: 我们知道计算机只能处理数字,如 ...

  4. python学习笔记(基础一:'hello world'、变量、字符编码)

    第一个python程序: Hello World程序 windows命令行中输入:python,进入python交互器,也可以称为解释器. print("Hello World!" ...

  5. Python学习,第二课 - 字符编码

    关于字符编码 python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill) ASCII(American Standard Code for Information Inte ...

  6. python学习(2)关于字符编码

    关于字符编码的学习内容笔记如下: 1.计算机只能用0和1来进行记录和存储.计算机是二进制. 2.ASCII(American Standard Code for Information Interch ...

  7. python基础(7):字符编码

    今天我们进入字符编码的学习.字符编码是一个多理论少结论的知识点,我会总结很多的知识点.我们只需要通读当作了解即可,最后我会总结需要我们理解掌握的重点. 一.学习字符编码的计算机基础储备 1.计算机软件 ...

  8. 小白的Python之路 day1 字符编码

    字符编码 python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill) ASCII(American Standard Code for Information Interc ...

  9. python基础1之python介绍、安装、变量和字符编码、数据类型、输入输出、数据运算、循环

    开启python之路 内容概要: 一.python介绍 二.安装 三.第一个python程序 四.变量和字符编码 五.用户输入 六.数据类型 七.一切皆对象 八.数据运算 九.if else 流程判断 ...

随机推荐

  1. leetcode Ch2-Dynamic Programming II

    一. Longest Valid Parentheses 方法一.一维DP class Solution { public: int longestValidParentheses(string s) ...

  2. Django 代码初体验

    其实Django中的代码逻辑就是和我们以前所学的一些项目差不多 就是 解耦.解耦.解耦 创建过后的Django文件 其中的day68是你的 项目的名字的相同的一个自动生成的文件里面都是放置配置文件类似 ...

  3. 使用TFHpple解析html

    使用TFHpple解析html https://github.com/topfunky/hpple 前期准备工作 引入静态库文件 添加库文件的 header search paths(注意,必须选中 ...

  4. [翻译] JSAnimatedImagesView

    JSAnimatedImagesView 本人测试的效果: Description:描述 Easy to use UIView subclass to quickly add a cool anima ...

  5. Java学习---MD5加密算法

    前言 在我们日常的程序开发中,或多或少会遇到一些加密/解密的场景,比如在一些接口调用的过程中,我们(Client)不仅仅需要传递给接口服务(Server)必要的业务参数,还得提供Signature(数 ...

  6. 内置模块之os

    os模块主要对操作系统进行调用的接口 一.os模块常用方法和属性 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("d:") 改变 ...

  7. 配置 Tomcat 服务 和 自启动

    如果我们使用war 包进行部署项目的时候,需要把包放进Tomcat的目录下,为了使我们的服务能够在服务器重启的时候自动启动起来,我们需要把Tomcat设置成自起服务. 配置 Tomcat 服务 新建服 ...

  8. canvas小球 时间demo

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  9. Save and read double array in a binary file

    ;} 32 bytes read 9.5 -3.4 1 2.1 "

  10. Inno Setup添加中文安装语言文件

    如果你不添加中文安装语言文件,你编译生成的安装包的语言是不会有中文. 一,打开软件安装目录下的Languages文件夹下,有如下好多文件,可是就是没有Chianese.isl. 好了,你只需要随便拷贝 ...