Python-编码之大彻大悟
1.了解各种编码的来历及其在计算机内部的存储:
http://www.cnblogs.com/JohnABC/p/3507219.html
http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
http://www.ruanyifeng.com/blog/2014/12/unicode.html
2.了解二进制文件和文本文件的区别: http://www.cnblogs.com/JohnABC/p/3478134.html
3.了解Python的Unicode和Str编码: http://www.cnblogs.com/JohnABC/p/4015504.html
4.在Python中正确使用Unicode: http://www.cnblogs.com/JohnABC/p/4257574.html
根据以上几篇文章总结以下要点:
0.转码时通常以unicode作为中间码, 先将其它编码的祖父次解码成unicode, 再从unicode编码成另一种编码。(string-uicode, bytes-str)
1.str和unicode都是basestring的子类, 严格意义上说, str对象其实是字节串, 它是unicode经过编码后的字节组成的序列, 实际是"8-bit-string", 字节字符串, 类似Java中的byte[], unicode对象等同于Java中的String对象, 本质上是Java的char[]
2.对 UTF-8编码的str'汉'使用len()函数时, 结果是3, 因为实际上, UTF-8编码的'汉' == '\xE6\xB1\x89'
3.unicode才是真正意义上的字符串, 对字节串str使用正确的字符编码进行解码后获得, 并且len(u'汉') == 1
4.repr()和``做的是完全一样的事情, 它们返回的是一个对象的“官方”字符串表示, 也就是说绝大多数情况下可以通过求值运算(使用内建函数 eval())重新得到该对象, 但str()则有所不同, str()致力于生成一个对象的可读性好的字符串表示, 它的返回结果通常无法用于eval()求值, 但很适合用于print语句输出, 需要再次提醒的是, 并不是所有repr()返回的字符串都能够用eval()内建函数得到原来的对象
5.如果文件是UTF-8编码的, 则以下会报错。因为文件是UTF-8编码的, 所以'你好'是UTF-8编码的, 用gb2312转成unicode是不可能的。
s = "你好" s.decode("gb2312").encode("utf-8")#UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 2-3:illegal multibyte sequence
6.获得系统的默认编码
#!/usr/bin/env python #coding=utf-8import sys print sys.getdefaultencoding()
a
u = u'汉' print repr(u) # u'\u6c49' s = u.encode('UTF-8') print repr(s) # '\xe6\xb1\x89' u2 = s.decode('UTF-8') print repr(u2) # u'\u6c49'
5.使用原则
- 所有文本字符串都应该是unicode类型,而不是str类型。如果处理的是文本,而变量类型是str,这就是bug了!
- 若要将字节串解码成字符串,需要使用正确的解码,即
var.decode(encoding)
(如,var.decode('utf-8')
)。将文本字符串编码成字节,使用var.encode(encoding)。 - 永远不要对unicode字符串使用
str()
,也不要在不指定编码的情况下就对字节串使用unicode()
。 - 当应用从外部读取数据时,应将其视为字节串,即str类型的,接着调用
.decode()
将其解释成文本。同样,在将文本发送到外部时,总是对文本调用.encode()
。 - 如果代码中使用字符串字面值来表示文本,总是应该含有’u'前缀。但实际上,永远不要在代码中定义原始的字符串字面值。不管怎样,我自己是很讨厌这一条,也许其他人也和我一样吧。
转载于:https://www.cnblogs.com/JohnABC/p/4257580.html
Python-编码之大彻大悟相关推荐
- python编码问题无法复现_Python编码问题详解
1. 基本概念 字符集(Character set) 解释:文字和符合的总称 常见字符集: Unicode字符集 ASCII字符集(Unicode子集) GB2312字符集 编码方法(Encoding ...
- Python编码实现冒泡排序
Python编码实现冒泡排序 冒泡排序是一种简单的排序算法,它也是一种稳定排序算法.其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换.一直重复这个过程,直到没有任 ...
- google python代码规范_如何用好python编码规范,写一手漂亮的代码
前一段时间在编写python 代码的时候编辑器中一直在提示规范问题,因为强迫症的原因,我决定遵循python 的编码规范去编码,然后把需要注意的点记录下来, 帮助自己和大家一起成长. 这是我的main ...
- PYTHON编码处理-str与Unicode的区别
一篇关于STR和UNICODE的好文章 整理下python编码相关的内容 注意: 以下讨论为Python2.x版本, Py3k的待尝试 开始 用python处理中文时,读取文件或消息,http参数等等 ...
- python编码规范手册-Python官方竟然给出了一种编码规范PEP 8
写在之前 每个人都有自己的代码风格,随着写的行数增加,自己对于代码的审美也会变的不一样,这就像是一个逐渐蜕变的过程,每过一段时间回头再去看看自己之前写的代码就会生出一种「这么丑的玩意儿竟然是我写的」这 ...
- python编码规范手册-PEP8 Python 编码规范整理
决定开始Python之路了,利用业余时间,争取更深入学习Python.编程语言不是艺术,而是工作或者说是工具,所以整理并遵循一套编码规范是十分必要的.所以今天下午我根据PEP 8整理了一份,以后都照此 ...
- 分享一点python 编码设置的知识
昨天我写了个python 操作mysql的方法,按照文档的提供的参数来写,写完了以后自己测试发现报了一个编码的错误,也不知道为什么会报这个错误,我一般对编码的错误比较在意,原来搞php的时候,就出现过 ...
- PEP8 Python 编码规范整理
决定开始Python之路了,利用业余时间,争取更深入学习Python.编程语言不是艺术,而是工作或者说是工具,所以整理并遵循一套编码规范是十分必要的.所以今天下午我根据PEP 8整理了一份,以后都照此 ...
- python编码问题总结
http://www.xprogrammer.com/1258.html 最近利用python抓取一些网上的数据,遇到了编码的问题.非常头痛,总结一下用到的解决方案. linux中vim下查看文件编码 ...
- python 编码文件json.loads json.dumps
python 编码文件json.loads json.dumps import yaml d = {'name': '张三', 'age': '1'} print d jd = json.dumps( ...
最新文章
- 早上醒来收获一个Surprise,成为CSDN博客专家了
- CountDownLatch 的使用 || enum 枚举使用的小技巧
- 手动实现kt(java)同步工作流和异步工作流
- 基于ARM的linux嵌入式操作系统
- oracle c#帮助文档下载,C#使用OracleClient连接Oracle数据库小记
- 百度面试题:从输入url到显示网页,后台发生了什么?
- python pow和**_「Python学习笔记」Python函数高级应用
- 强悍的命令行 —— 路径相关
- 2021-09-07python深拷贝和浅拷贝
- 无责任书评——DOOM启示录 BORLAND传奇
- MySQL基础 — 常用命令
- 反向题在测试问卷信效度_(完整版)问卷信度效度检验
- 东方时尚驾校学习心得
- SecureCRT 中如何配置颜色
- ECharts 中的事件和行为
- pg数据库numeric对应oracle,Oracle类型number与PG类型numeric对比和转换策略
- 中国RoHS认证流程问题
- “AI骨龄医生”周年庆完美收官!武汉站引数百位儿科医生追捧
- 稀疏矩阵的转置(矩阵转置和快速转置)
- 类似百度文库DocHub安装详细过程
热门文章
- 11210怎么等于24_【Python】鸡兔同笼怎么“妙解”?
- python防反编译_Python - 浅谈Python的编译与反编译
- oracle 查询字段除了as,Oracle中怎样查询数据表的哪个字段是主键
- trycatch抛出异常_Java生鲜电商平台架构中,如何统一异常处理及架构实战
- python用def编写calsum函数_Python函数
- 8 pycharm 快捷键_Pycharm自动添加文件头注释和函数注释参数
- ArcGIS Engine10.4版本
- 记录一下python-opencv-ArUco-Apriltag
- c语言关键字_C语言初学者必须掌握的关键字!
- myeclipse8.6安装svn