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-编码之大彻大悟相关推荐

  1. python编码问题无法复现_Python编码问题详解

    1. 基本概念 字符集(Character set) 解释:文字和符合的总称 常见字符集: Unicode字符集 ASCII字符集(Unicode子集) GB2312字符集 编码方法(Encoding ...

  2. Python编码实现冒泡排序

    Python编码实现冒泡排序 冒泡排序是一种简单的排序算法,它也是一种稳定排序算法.其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换.一直重复这个过程,直到没有任 ...

  3. google python代码规范_如何用好python编码规范,写一手漂亮的代码

    前一段时间在编写python 代码的时候编辑器中一直在提示规范问题,因为强迫症的原因,我决定遵循python 的编码规范去编码,然后把需要注意的点记录下来, 帮助自己和大家一起成长. 这是我的main ...

  4. PYTHON编码处理-str与Unicode的区别

    一篇关于STR和UNICODE的好文章 整理下python编码相关的内容 注意: 以下讨论为Python2.x版本, Py3k的待尝试 开始 用python处理中文时,读取文件或消息,http参数等等 ...

  5. python编码规范手册-Python官方竟然给出了一种编码规范PEP 8

    写在之前 每个人都有自己的代码风格,随着写的行数增加,自己对于代码的审美也会变的不一样,这就像是一个逐渐蜕变的过程,每过一段时间回头再去看看自己之前写的代码就会生出一种「这么丑的玩意儿竟然是我写的」这 ...

  6. python编码规范手册-PEP8 Python 编码规范整理

    决定开始Python之路了,利用业余时间,争取更深入学习Python.编程语言不是艺术,而是工作或者说是工具,所以整理并遵循一套编码规范是十分必要的.所以今天下午我根据PEP 8整理了一份,以后都照此 ...

  7. 分享一点python 编码设置的知识

    昨天我写了个python 操作mysql的方法,按照文档的提供的参数来写,写完了以后自己测试发现报了一个编码的错误,也不知道为什么会报这个错误,我一般对编码的错误比较在意,原来搞php的时候,就出现过 ...

  8. PEP8 Python 编码规范整理

    决定开始Python之路了,利用业余时间,争取更深入学习Python.编程语言不是艺术,而是工作或者说是工具,所以整理并遵循一套编码规范是十分必要的.所以今天下午我根据PEP 8整理了一份,以后都照此 ...

  9. python编码问题总结

    http://www.xprogrammer.com/1258.html 最近利用python抓取一些网上的数据,遇到了编码的问题.非常头痛,总结一下用到的解决方案. linux中vim下查看文件编码 ...

  10. python 编码文件json.loads json.dumps

    python 编码文件json.loads json.dumps import yaml d = {'name': '张三', 'age': '1'} print d jd = json.dumps( ...

最新文章

  1. 早上醒来收获一个Surprise,成为CSDN博客专家了
  2. CountDownLatch 的使用 || enum 枚举使用的小技巧
  3. 手动实现kt(java)同步工作流和异步工作流
  4. 基于ARM的linux嵌入式操作系统
  5. oracle c#帮助文档下载,C#使用OracleClient连接Oracle数据库小记
  6. 百度面试题:从输入url到显示网页,后台发生了什么?
  7. python pow和**_「Python学习笔记」Python函数高级应用
  8. 强悍的命令行 —— 路径相关
  9. 2021-09-07python深拷贝和浅拷贝
  10. 无责任书评——DOOM启示录 BORLAND传奇
  11. MySQL基础 — 常用命令
  12. 反向题在测试问卷信效度_(完整版)问卷信度效度检验
  13. 东方时尚驾校学习心得
  14. SecureCRT 中如何配置颜色
  15. ECharts 中的事件和行为
  16. pg数据库numeric对应oracle,Oracle类型number与PG类型numeric对比和转换策略
  17. 中国RoHS认证流程问题
  18. “AI骨龄医生”周年庆完美收官!武汉站引数百位儿科医生追捧
  19. 稀疏矩阵的转置(矩阵转置和快速转置)
  20. 类似百度文库DocHub安装详细过程

热门文章

  1. 11210怎么等于24_【Python】鸡兔同笼怎么“妙解”?
  2. python防反编译_Python - 浅谈Python的编译与反编译
  3. oracle 查询字段除了as,Oracle中怎样查询数据表的哪个字段是主键
  4. trycatch抛出异常_Java生鲜电商平台架构中,如何统一异常处理及架构实战
  5. python用def编写calsum函数_Python函数
  6. 8 pycharm 快捷键_Pycharm自动添加文件头注释和函数注释参数
  7. ArcGIS Engine10.4版本
  8. 记录一下python-opencv-ArUco-Apriltag
  9. c语言关键字_C语言初学者必须掌握的关键字!
  10. myeclipse8.6安装svn