字符串编码

摘要:
从文件中读取的UTF-8字符被转换为Unicode字符并存储在内存中。保存时,Unicode将转换为UTF-8并保存到文件中。因为Python的字符串类型是str,所以Unicode表示的str是通过encoding()方法编码的:当我们从网络或磁盘读取字节流时,读取的数据是字节。当转换为str时,如果字节中有少量无效字节,则需要使用decode()。

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

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

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

以Unicode表示的str通过encode()方法进行编码:

'ABC'.encode('ascii')
'中文'.encode('utf-8')

反过来,我们从网络或磁盘上读取了字节流,那么读取到的数据是bytes,转变为str要使用decode()

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

b'ABC'.decode('ascii')
b'xe4xb8xadxe6x96x87'.decode('utf-8')
b'xe4xb8xadxff'.decode('utf-8',errors='ignore')

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

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

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

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

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

申明了UTF-8编码并不意味着你的.py文件就是UTF-8编码的,必须并且要确保文本编辑器正在使用UTF-8 without BOM编码

免责声明:文章转载自《字符串编码》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇windows xp/7/8/8.1/10安全模式详解和系统修复讲解无废话JavaScript(下)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python(一):python语言基础

一、python语言基本的8个要素 Python语言的8个要素:数据类型、对象引用、组合数据类型、逻辑操作符、运算操作符、控制流语句、输入/输出、函数的创建与引用。除此之外还有一个非常重要且无处不在的要素:对象。实际上,在所有的语言当中,这种要素结构几乎一样。   1.要素1--数据和对象类型 python的数据类型是指内置数据类型。python基本的内置...

python2/3中 将base64数据写成图片,并将图片数据转为16进制数据的方法、bytes/string的区别

1.python2将base64数据写成图片,并将数据转为16进制字符串的方法 import binascii img = u'R0lGODlhagAeAIcAAAAAAAAARAAAiAAAzABEAABERABEiABEzACIAACIRACIiACIzADMAADMRADMiADMzADd3REREQAAVQAAmQAA3QBVAABVVQ...

java python AES 加密 对比

/** * aes解密 * @param * @param content 密文 * @return */ public static String AESDncode(String appkey, String content) { try { // 1....

Linux命令之dd

dd [OPERAND] dd 选项 复制一个文件,根据[OPERAND]进行转换和格式化 (1). OPERAND参数 说明1:dd的选项只有’--help’和’--version’,也就是帮助与版本信息。而下列都是[操作数],而非选项。 说明2:读取是输入,写入是输出 说明3:不指定if,默认从标准输入读取。如果不指定of,默认写入到标准输出 bs=B...

java实现视频断点上传文件

一、概述   所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用到Range和Content-Range实体头。HTTP协议本身不支持断点上传,需要自己实现。   二、Range    用于请求头中,指定第一个字节的位置和最后一个字节的位置,一般格...

atoi、stoi、strtoi区别

首先atoi和strtol都是c里面的函数,他们都可以将字符串转为int,它们的参数都是const char*,因此在用string时,必须调c_str()方法将其转为char*的字符串。或者atof,strtod将字符串转为double,它们都从字符串开始寻找数字或者正负号或者小数点,然后遇到非法字符终止,不会报异常: int main() {...