Python学习笔记之编码问题 unicode、encode、decode
但是,由于他是针对英语设计的,当处理带有音调标号(形如汉语的拼音)的欧洲文字时就会出现问题。
把汉语、日语和越南语的一些相似的字符结合起来,在不同的语言里,使不同的字符代表不同的字,这样只用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
转载于:https://www.cnblogs.com/zhangyang520/p/7978745.html
Python学习笔记之编码问题 unicode、encode、decode相关推荐
- Python学习笔记:第三方模块2
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记_1_基础_2:数据运算、bytes数据类型、.pyc文件(什么鬼)
Python学习笔记_1_基础_2:数据运算.bytes数据类型..pyc文件(什么鬼) 一.数据运算 Python数据运算感觉和C++,Java没有太大的差异,百度一大堆,这里就不想写了.比较有意思 ...
- python 学习笔记 (核心)
python 学习笔记 (核心) Python解释器从头到尾一行接一行执行脚本 # -*- coding: UTF-8 -*- //字符编码 不区分单引号和双引号,x='hello',x[ ...
- Python学习笔记Day 3
Python学习笔记 Day 3 集合(关系测试.去重) 集合定义 关系测试-交集(&),并集(|),差集(-),子集,父集,对称差集(^) 增删查 增 .set.add(),.set.upd ...
- Python学习笔记13_模块
Python学习笔记13_模块 文章目录 Python学习笔记13_模块 1.导入模块和的方法及使用 2.分层的文件系统中常用的包结构 3.OS 模块 4.sys 模块 5.math 模块 6.ran ...
- Python学习笔记:第九站 一串连一串
Python学习笔记 文章目录 Python学习笔记 第九站 一串连一串 1. 字符串的驻留机制 2. 字符串的常用操作 3. 字符串的比较 4. 字符串的切片操作 5. 格式化字符串 6. 字符串的 ...
- Python学习笔记(十一)
Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...
- 廖Python学习笔记一
1. 廖Python学习笔记 大的分类 如函数 用二级标题,下面的用三级 如输入输出 1.1.1. 输入输出 1.1.1.1. 输出 用 print() 在括号里加上字符串,就可以向屏幕上输出指定的文 ...
- Python学习笔记(六)
1. IO编程 1.1 文件读写 1.2 StringIO和BytesIO 1.3 操作文件和目录 1.4 序列化 2. 进程和线程 2.1 多进程 2.2 多线程 2.3 ThreadLocal 2 ...
最新文章
- openapi开放平台架构_适用于所有人的MicroProfile OpenAPI
- Android Spinner值不显示,选择列表正常
- python数字转对应中文_python中将阿拉伯数字转换成中文的实现代码 | 学步园
- boost::range模块strided相关的测试程序
- .Net Core下使用KeyDB高可用缓存集群
- Ionic Angular自动捕获错误 配置Angular2.x +
- cvpr 注意力机制_视频人员重识别:关系引导空间注意力 + 时间特征提取模型
- 聊天机器人最难理解的 10 个词汇
- 谷歌/微软/必应web页面免费翻译插件
- Zookeeper集群搭建(多节点,单机伪集群,Docker集群)
- 国家法定节假日安排,节假日查询API接口有哪些?
- D-013 蜂鸣器硬件电路设计
- java经典50道编程题(很好练逻辑思维的题)(第一篇)
- 服务器断电重启,mysql未启动。
- 崩坏3卡池模拟器及毕业期望概率计算(含保底)
- 调试热释电传感器(BISS0001电路)中遇到的问题
- 大数据培训 | 电商用户行为分析之订单支付实时监控
- [转]IT人的学习方法
- matlab vvvs电机,MATLAB/Simulink在控制系统仿真与CAD应用(一)
- 关于CTRL+Z失效的问题
热门文章
- Android之Android studio实现智能聊天机器人
- Confluent介绍
- android3d动画的实现,【转】Android 实现3d动画旋转效果
- mac系统下如何安装python的numpy
- 超高频rfid智能仓储电子标签
- JAVA向Mysql插入亿级别数据---测评
- 支架的工艺规程及钻Φ52孔的工装夹具设计(说明书+CAD图纸+工艺卡)
- 【愚公系列】2021年12月 Java教学课程 38-Lambda表达式
- C++数据交换格式库jsoncpp安装与使用详解
- ubuntu/linux系统知识(24)ubuntu自带的录屏软件