在处理中文的时候,我们有时候会碰到中文乱码的问题。
究其根本原因是正确的字节序列按照错误的编码方式解码成字符
或者正确的字符被错误的编码成字节序列导致信息的丢失,然后不管如何解码都无法恢复。
字节序列常见于保存在磁盘上的文件,网络中传输的内容等。
如果您对java的字符编码感兴趣的话,
请参见本人另一篇博文 深度剖析java字符编码
一,通过例子理解字符编码
在Python中有两个和字符很相关的类型,一个是str类型,一个是unicode类型。
这两种类型的对象都是sequece序列,其中str是字节序列,而unicode是字符序列
在2.x版本的python中,默认定义的字符串是str类型的。
比如你这么定义
# -*- coding:utf-8 -*-
s=”中文”
us=u”中文”
这样的源码是保存在源码文件中的,其实文件保存在磁盘上的时候都是二进制的字节编码 E4 B8 AD E6 96 87
,只有一定的软件比如文件编辑器打开文件对这些文本的二进制编码进行正确的解码后才能在软件中显示正确,被人们所看懂。
那么在运行的时候是什么样的状态呢?
首先python的运行环境会检测你的源码的编码方式,utf-8
且s的类型是str类型,即字节序列,那么我们需要将”中文”从源码文件中按照utf-8读取成字节序列,那么s在运行的时候就是找个字节序列。其长度len(s)为6,因为utf-8中一个中文需要3个字节E4 B8 AD E6 96 87来表示
而us是unicode字符串,那么在运行的时候,us是“中”和“国”这两个字符的unicode字符\u4E2D \u6587,其长度是2
二.Python中和编码相关的两个函数
在Python中和编码相关的两个函数为decode和encode
在Java中你也会发现这两个类似的方法。
你搜索一下互联网你会发现关于这两个方法的叙述会很多,很多都说的不是很准确。
其中encode()是将某个unicode字符串按照一定的编码方式编码成字节序列
而decode()是一个反过程,将一个字节序列按照一定的编码方式解码成unicode字符串。
这个时候可能有人会问:那么对于一个str类型(已经是字节数组)再应用decode是什么概念呢??
其实str.encode(e) 是和 unicode(str).encode(e)是一样的,python底层做的时候也是确实这么做的。
python这么实现主要是为了方式当某个对象不确定是str还是unicode类型的时候,那么用encode函数总是不会出现错误。
三.Python3000中的字符编码
而在python3k中,所有的str类型的字符串默认就是unicode字符串,字节数组则可以通过bytes类型来表示。这就和java很类似了。
分享到:
相关推荐
### Python字符编码与中文乱码问题详解 #### 一、引言 在处理中文文本时,经常遇到的一个问题是中文乱码。特别是在使用Python进行开发时,由于不同的操作系统默认编码方式不同,以及Python自身对源文件编码的处理...
Python字符编码是编程中不可或缺的基础知识,理解和掌握它对于解决编码相关的错误至关重要。本文将深入探讨Python中的字符编码,以及其与计算机字符编码历史的关系。 首先,我们要了解几个基本概念。字节(Byte)是...
算术编码是一种高效的数据压缩方法,它在信息技术和数据传输领域有着广泛的应用。...通过理解和实现这个Python项目,你可以深入理解算术编码的工作原理,并能将其应用于实际的数据压缩场景,优化数据存储和传输效率。
本文将根据给定的“Python编码规范(Google)”文件内容,深入解析其中的关键知识点,并提供具体的实践建议。 #### 二、分号 **知识点:** - **避免使用分号:** 根据Google的Python编码规范,不推荐在行尾使用分号...
Python字符编码是编程中至关重要的一个方面,尤其是在处理文本数据时。在Python 2和Python 3中,字符编码有着显著的区别。Python 2默认使用ASCII编码,这可能导致处理非ASCII字符时出现乱码问题。而Python 3则将...
在Python编程语言中,字符串是数据类型之...通过以上内容,我们对Python字符串有了全面而深入的理解,这有助于我们在实际编程中更高效地处理文本数据。在日常开发中,灵活运用这些知识能大大提高代码的可读性和实用性。
这本书集结了88个关键知识点,旨在帮助读者深入理解Python的精髓,从而在实践中更好地运用这门强大的语言。 1. **异常处理**:Python中的错误和异常处理是编程时必须掌握的部分,如try/except/finally结构,以及...
本实验旨在深入理解Python字符串的编码格式、基本操作、格式化、正则表达式以及如何利用字符串解决实际问题,如加密、字符检查、密码生成和字符过滤。 1. 凯撒加密是一种简单的替换加密技术,通过将字母表上的每个...
字符编码定义了如何将文字、符号等字符转换成二进制形式,以便计算机理解和处理。本文将深入探讨字符与编码的概念、发展历史、程序中的应用,以及如何解决乱码问题和进行编码转换。 **一、字符与编码的概念** 字符...
本文将深入探讨Python 2.7中的字符串类型、字符编码以及它们如何与操作系统和编程环境相互作用。 首先,我们要区分两种主要的字符串类型:`str`和`unicode`。`str`类型是字节序列,它表示的是特定字符集(如ASCII、...
通过整个文档的内容,我们可以获得关于Unicode编码和Python处理Unicode的深入理解,包括字符编码的历史背景、Unicode的定义和编码方式,以及Python语言本身是如何支持Unicode的,包括字符串类型处理、编码转换、...
《深入理解Python》这本书是Python编程领域的一部经典著作,旨在帮助读者全面、深入地掌握Python语言的核心概念和实用技巧。书中的内容涵盖了Python的基础语法、高级特性、面向对象编程、异常处理、标准库和第三方库...
"python字符编码.doc" 可能涵盖了字符串的编码和解码操作。Python 中的 `str.encode()` 方法可以将字符串转换为字节序列,指定编码;而 `bytes.decode()` 方法则将字节序列还原为字符串。例如,`s = "你好".encode('...
本篇文章将深入探讨Python中的字符串和编码,旨在帮助你更好地理解和运用这些关键概念。 1. **字符串基础知识** 在Python中,字符串是由一个或多个字符组成的序列。它们可以包含字母、数字、标点符号,甚至是特殊...
本篇文章将深入探讨字符编码的转换规则及其实现方法。 首先,我们要了解几种常见的字符编码体系:Ansi(通常指Windows默认的ANSI编码,即ASCII扩展)、Unicode和UTF-8。ASCII是最基础的7位字符编码,可以表示128个...
总的来说,理解Python2中的编码和解码机制,以及如何在处理文件和字符串时正确应用它们,对于避免中文乱码问题至关重要。通过细心处理编码转换,你可以确保Python程序能正确地处理各种语言的文本数据。
Python字符串是编程中常用的数据类型,它用于存储和处理文本信息。在Python中,字符串有其独特的特性和操作方式,让我们一一深入探讨。 首先,**字符串的驻留机制**是Python为了提高性能的一种优化策略。当创建一个...
在学习过程中,你可以先从《简明Python教程》入手,建立基础的编程概念,然后通过《深入Python2》理解Python 2的特性和经典用法,最后转向《深入Python3》,适应并掌握最新的Python标准。同时,实践是检验学习效果的...
在本项目中,我们将深入探讨图像处理领域的一个关键概念——基于Python的图像编码,特别是涉及到香农、霍夫曼和费诺编码的理论与实践。这些编码方法在数据压缩和图像传输中扮演着重要角色,因为它们能有效地减少数据...