在所有字符集中,最知名的可能要数被称为ASCII的7位字符集了。它是美国标准信息交换代码(American Standard Code for Information Interchange)的缩写, 为美国英语通信所设计。它由128个字符组成,包括大小写字母、数字0-9、标点符号、非打印字符(换行符、制表符等4个)以及控制字符(退格、响铃等)组成。
但是,由于他是针对英语设计的,当处理带有音调标号(形如汉语的拼音)的欧洲文字时就会出现问题。
把汉语、日语和越南语的一些相似的字符结合起来,在不同的语言里,使不同的字符代表不同的字,这样只用2个字节就可以编码地球上几乎所有地区的文字。因此,创建了UNICODE编码。它通过增加一个高字节对ISO Latin-1字符集进行扩展,当这些高字节位为0时,低字节就是ISO Latin-1字符。

事实证明,对可以用ASCII表示的字符使用UNICODE并不高效,因为UNICODE比ASCII占用大一倍的空间,而对ASCII来说高字节的0对他毫无用处。为了解决这个问题,就出现了一些中间格式的字符集,他们被称为通用转换格式,即UTF(Universal Transformation Format)。常见的UTF格式有:UTF-7, UTF-7.5, UTF-8,UTF-16, 以及 UTF-32。

ivan_utf8='Ivan Krstić'
ivan_uni = ivan_utf8.encode('utf-8')
>>> ivan_utf8[-1]
python3报错,最后一个字符直接打不出来:UnicodeEncodeError: 'gbk' codec can't encode character '\x87' in position 0
>>> ivan_utf8[-1].encode('utf-8')
编个码也就是换成i van_uni[-1] 打出来是 b'\xc4\x87'
>>> type(ivan_utf8)
<class 'str'> 编码前是字符
>>> type(ivan_uni)
<class 'bytes'> 编码后变成字节
>>> len(ivan_utf8)
11
>>> len(ivan_uni)
12
\xc4\x87算两个

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。
有时python3会报错:AttributeError: 'str' object has no attribute 'decode'
因为python3里str默认为 unicode 了吧。只能编码 encode 不能解码 decode。

Unicode in Python 3

they fixed Unicode!
    <type 'str'> is a Unicode object ——所以str不能解码了,因为默认是 unicode
    separate <type 'bytes'> type ——有 b 什么什么的类型了
    all builtin modules support Unicode
    no more u'text' syntax ——默认 u 了,没有 u 什么什么的这种显示了

open() takes an encoding argument, like codecs.open()
    default encoding is UTF-8 not ASCII
        woo! ——open 文件会直接编码成 utf-8
    Tries to guess the file encoding
        You will still need to declare encodings ——最好猜测文件编码类型是 utf-8

http://farmdev.com/talks/unicode/
这个文档主要针对python2

___________2016更新___________

字符串1:\u5168\u7403\u7ecf\u5178IT\u6570\u7801\u6392\u884c\u699c
解决方法:
1.decode("unicode_escape")
2.多谢“qinjianxiang”帮忙
print u'\u5168\u7403\u7ecf\u5178IT\u6570\u7801\u6392\u884c\u699c'.encode('utf-8')
其中,u前缀告诉Python后面的字符串要编成unicode字符串

字符串2:一年一度的
解决方法:多谢“qinjianxiang”帮忙
import HTMLParser
h = HTMLParser.HTMLParser()
print h.unescape('一年一度的')

来源:https://segmentfault.com/q/1010000000344967

list没法encode:
github上有个uniout插件,可转化list中的编码(我没试)
https://github.com/moskytw/uniout

Python

转载于:https://www.cnblogs.com/zhangyang520/p/7978745.html

Python学习笔记之编码问题 unicode、encode、decode相关推荐

  1. Python学习笔记:第三方模块2

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  2. Python学习笔记_1_基础_2:数据运算、bytes数据类型、.pyc文件(什么鬼)

    Python学习笔记_1_基础_2:数据运算.bytes数据类型..pyc文件(什么鬼) 一.数据运算 Python数据运算感觉和C++,Java没有太大的差异,百度一大堆,这里就不想写了.比较有意思 ...

  3. python 学习笔记 (核心)

    python    学习笔记 (核心) Python解释器从头到尾一行接一行执行脚本 # -*- coding: UTF-8 -*-    //字符编码 不区分单引号和双引号,x='hello',x[ ...

  4. Python学习笔记Day 3

    Python学习笔记 Day 3 集合(关系测试.去重) 集合定义 关系测试-交集(&),并集(|),差集(-),子集,父集,对称差集(^) 增删查 增 .set.add(),.set.upd ...

  5. Python学习笔记13_模块

    Python学习笔记13_模块 文章目录 Python学习笔记13_模块 1.导入模块和的方法及使用 2.分层的文件系统中常用的包结构 3.OS 模块 4.sys 模块 5.math 模块 6.ran ...

  6. Python学习笔记:第九站 一串连一串

    Python学习笔记 文章目录 Python学习笔记 第九站 一串连一串 1. 字符串的驻留机制 2. 字符串的常用操作 3. 字符串的比较 4. 字符串的切片操作 5. 格式化字符串 6. 字符串的 ...

  7. Python学习笔记(十一)

    Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...

  8. 廖Python学习笔记一

    1. 廖Python学习笔记 大的分类 如函数 用二级标题,下面的用三级 如输入输出 1.1.1. 输入输出 1.1.1.1. 输出 用 print() 在括号里加上字符串,就可以向屏幕上输出指定的文 ...

  9. Python学习笔记(六)

    1. IO编程 1.1 文件读写 1.2 StringIO和BytesIO 1.3 操作文件和目录 1.4 序列化 2. 进程和线程 2.1 多进程 2.2 多线程 2.3 ThreadLocal 2 ...

最新文章

  1. openapi开放平台架构_适用于所有人的MicroProfile OpenAPI
  2. Android Spinner值不显示,选择列表正常
  3. python数字转对应中文_python中将阿拉伯数字转换成中文的实现代码 | 学步园
  4. boost::range模块strided相关的测试程序
  5. .Net Core下使用KeyDB高可用缓存集群
  6. Ionic Angular自动捕获错误 配置Angular2.x +
  7. cvpr 注意力机制_视频人员重识别:关系引导空间注意力 + 时间特征提取模型
  8. 聊天机器人最难理解的 10 个词汇
  9. 谷歌/微软/必应web页面免费翻译插件
  10. Zookeeper集群搭建(多节点,单机伪集群,Docker集群)
  11. 国家法定节假日安排,节假日查询API接口有哪些?
  12. D-013 蜂鸣器硬件电路设计
  13. java经典50道编程题(很好练逻辑思维的题)(第一篇)
  14. 服务器断电重启,mysql未启动。
  15. 崩坏3卡池模拟器及毕业期望概率计算(含保底)
  16. 调试热释电传感器(BISS0001电路)中遇到的问题
  17. 大数据培训 | 电商用户行为分析之订单支付实时监控
  18. [转]IT人的学习方法
  19. matlab vvvs电机,MATLAB/Simulink在控制系统仿真与CAD应用(一)
  20. 关于CTRL+Z失效的问题

热门文章

  1. Android之Android studio实现智能聊天机器人
  2. Confluent介绍
  3. android3d动画的实现,【转】Android 实现3d动画旋转效果
  4. mac系统下如何安装python的numpy
  5. 超高频rfid智能仓储电子标签
  6. JAVA向Mysql插入亿级别数据---测评
  7. 支架的工艺规程及钻Φ52孔的工装夹具设计(说明书+CAD图纸+工艺卡)
  8. 【愚公系列】2021年12月 Java教学课程 38-Lambda表达式
  9. C++数据交换格式库jsoncpp安装与使用详解
  10. ubuntu/linux系统知识(24)ubuntu自带的录屏软件