python 字符编码练习

 

通过下面的练习,加深对python字符编码的认识

# \x00 - \xff 256个字符
>>> a = range(256)>>> b = bytes(a)      # 不用参数encoding
>>> b
b'\x00\x01\x02 ... \xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'
>>> b.decode('utf-8') # 报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 128: invalid start byte
>>> b.decode('unicode-escape') #正常
'\x00\x01\x02 ... \xf6÷\xf8ùú\xfbü\xfd\xfe\xff'
# 题外:上面几句等价于下面一句>>> ''.join(list(map(chr, range(256))))'\x00\x01\x02 ... \xf6÷\xf8ùú\xfbü\xfd\xfe\xff'
>>> a = 'abc'
>>> a
'abc'
>>> b = bytes(a, encoding='utf-8')  # 方式一:把 'abc' 变为字节数据
>>> b
b'abc'
>>> c = a.encode('utf-8')           # 方式二:把 'abc' 变为字节数据,与一等价
>>> c
b'abc'

# \x00 - \xff 256个字符,bytearray方式
>>> a = range(256)
>>> b = bytearray(a)
>>> b
bytearray(b'\x00\x01\x02 ... \xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff')
>>> b.decode('unicode-escape')
'\x00\x01\x02 ... \xf6÷\xf8ùú\xfbü\xfd\xfe\xff'

# 中文编码
>>> a = '中'
>>> a
'中'
>>> b = a.encode('gbk')
>>> b
b'\xd6\xd0'
>>> c = a.encode('utf-8')
>>> c
b'\xe4\xb8\xad'
>>> d = a.encode('unicode-escape')
>>> d
b'\\u4e2d'
>>> e = a.encode('cp936')
>>> e
b'\xd6\xd0'

# 中文解码
>>> a.decode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'decode'

>>> b.decode()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 0: invalid continuation byte

>>> b.decode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 0: invalid continuation byte

>>> b.decode('gbk')
'中'
>>> b.decode('cp936') # gbk编码的可以cp936解码,反之不行。因为gbk是cp936的一个子集
'中'

 

 

python官方支持的编码格式大全:https://docs.python.org/3/library/codecs.html#standard-encodings

 

时间: 2024-11-30 04:32:57

python 字符编码练习的相关文章

快速入手Python字符编码_python

前言 对于很多接触Python的人而言,字符的处理和语言整体的温顺可靠相比显得格外桀骜不驯难以驾驭. 文章针对Python 2.7,主要因为3对的编码已经有了很大的改善并且实际原理一样,更改一下操作命令即可. 了解完本文,你可以轻松解决文字处理,特殊平台(Windows?)下的编码,爬虫编码等问题. 阅读建议 本文分为如下几个部分:     1.原理     2.具体操作     3.建议的使用习惯     4.疑难问题解答 如果想要了解我给出的使用习惯,可以直接跳到建议的使用习惯. 如果只想要

PYTHON字符编码深入分析

一旦走上了编程之路,如果你不把编码问题搞清楚,那么它将像幽灵一般纠缠你整个职业生涯,各种灵异事件会接踵而来,挥之不去.只有充分发挥程序员死磕到底的精神你才有可能彻底摆脱编码问题带来的烦恼,我第一次遇到编码问题是写JavaWeb相关的项目,一串字符从浏览器游离到应用程序代码中,翻江倒海沉浸到数据库中,随时随地都有可能踩到编码的地雷.第二次遇到编码问题就是学Python的时候,在爬取网页数据时,编码问题又出现了,当时我的心情是奔溃的,用时下最ing的一句话就是:"我当时就懵逼了". 为了搞

跟老齐学Python之坑爹的字符编码_python

字符编码,在编程中,是一个让学习者比较郁闷的东西,比如一个str,如果都是英文,好说多了.但恰恰不是如此,中文是我们不得不用的.所以,哪怕是初学者,都要了解并能够解决字符编码问题. >>> name = '老齐' >>> name '\xe8\x80\x81\xe9\xbd\x90' 在你的编程中,你遇到过上面的情形吗?认识最下面一行打印出来的东西吗?看人家英文,就好多了 >>> name = "qiwsir" >>&g

ascii-python字符编码错误 UnicodeDecodeError:

问题描述 python字符编码错误 UnicodeDecodeError: 我在出错的.py文件中加上了: import sys reload(sys) sys.setdefaultencoding('utf-8') 还是报上面这个错误: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128) ,不知道怎么回事. 解决方案 你需要用unicode编码处理那个

Python获取系统默认字符编码的方法

  本文实例讲述了Python获取系统默认字符编码的方法.分享给大家供大家参考.具体分析如下: 在Python代码中,普通字符串的编码方式与程序源文件编码方式一致的,而很多IDE在默认情况下,将程序源文件按照系统默认字符编码来保存的. 下面给出用Python获取系统默认编码的例子: ? 1 2 3 4 5 6 7 #!/usr/bin/env python #coding=utf-8 """ 获取系统默认编码 """ import sys pri

Python使用chardet判断字符编码

  这篇文章主要介绍了Python使用chardet判断字符编码的方法,较为详细的分析了Python中chardet的功能.安装及使用技巧,需要的朋友可以参考下 Python中chardet 用来实现字符串/文件编码检测模板 1.chardet下载与安装 下载地址:http://pypi.python.org/pypi/chardet 下载chardet后,解压chardet压缩包,直接将chardet文件夹放在应用程序目录下,就可以使用import chardet开始使用chardet了,也可

在Python中使用base64模块处理字符编码的教程

  这篇文章主要介绍了在Python中使用base64模块处理字符编码的教程,示例代码基于Python2.x版本,需要的朋友可以参考下 Base64是一种用64个字符来表示任意二进制数据的方法. 用记事本打开exe.jpg.pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法.Base64是一种最常见的二进制编码方法. Base64的原理很简单,首先,准备一个包含64个字符

Python中字符编码简介、方法及使用建议_python

1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有英文,而单字节可以表示256个不同的字符,可以表示所有的英文字符和许多的控制符号.不过ASCII只用到了其中的一半(\x80以下),这也是MBCS得以实现的基础. 1.2. MBCS 然而计算机世界里很快就有了其他语言,单字节的ASCII已无法满足需求.后来每个语言就制定了一套自己的编码,由于单字节

再谈Python中的字符串与字符编码(推荐)_python

本节内容: 1.前言 2.相关概念 3.Python中的默认编码 4.Python2与Python3中对字符串的支持 5.字符编码转换 一.前言 Python中的字符编码是个老生常谈的话题,同行们都写过很多这方面的文章.有的人云亦云,也有的写得很深入.近日看到某知名培训机构的教学视频中再次谈及此问题,讲解的还是不尽人意,所以才想写这篇文字.一方面,梳理一下相关知识,另一方面,希望给其他人些许帮助. Python2的 默认编码 是ASCII,不能识别中文字符,需要显式指定字符编码:Python3的