通过python3学习编码
简介
今天在写python程序的时候,遇到了编码问题,今天,我准备好好了解一下编码问题
ASCII编码
计算机是美国人发明的,最初只有不超过256字符需要编码,1字节能编码2**8个,所以ASCII编码就是这么来的。现在的键盘,不用输入法能打出来的字符,都在ASCII码表里。
其他编码
后来,计算机逐渐普及,需要编码其他国家的字符,比如中文,日文,韩文,中国有GB2312等(当然,会占用多个字节),其他国家也有各自的编码表。但是这有个问题,如果一串字符有多个国家的语言,无法处理。
Unicode
Unicode将各种国家字符统一编码。这样便解决了统一编码的问题。Unicode非常适合在内存中使用,同一种语言,编码格式是相近的,便于计算。但是,当需要存储的时候,就不太合适了,浪费空间。
ustring = '中'
print('--- Unicode ---')
ubyte = ustring.encode('unicode_escape')
print(len(ubyte))
print(ubyte) # 直接输出第一个\是转义
print(''.join([chr(c) for c in ubyte]))
输出结果:
--- Unicode ---
6
b'\\u4e2d'
\u4e2d
可以看到,一个中文的中字,就占了6个字节,编码其实只有4个字节4e2d,但\u,也要存储
UTF-8
为了便于减小传输和存储的大小,UTF-8编码出现了。同样是中
print('--- UTF-8 ---')
ubyte = ustring.encode('utf-8')
print(len(ubyte))
print(ubyte)
print(''.join([chr(c) for c in ubyte]))
输出如下:
--- UTF-8 ---
3
b'\xe4\xb8\xad'
ä¸-
只占用了3个字节,\x是python加上去的,代表16进制方式读取,也就是e4, b8, ad这三个字节。可能会有人不知道e4为啥是一个字节,16进制和2进制对应如下,占4位,一个字节8位,所以是两个字符
0 = 0000
1 = 0001
...
a = 0110
...
e = 1110
f = 1111
json的编码
为啥今天我会想好好了解一下编码呢,因为我在编程的时候用到了json,有趣的是,python中json的编码方式默认使用的不是utf-8,而是unicode,我还傻傻分不清楚,晕了半天。不过使用json.dumps和json.loads其实根本遇不到这个问题
通过python3学习编码的更多相关文章
- Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html
Python3学习笔记(urllib模块的使用) 1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, ...
- Python3学习之路~0 目录
目录 Python3学习之路~2.1 列表.元组操作 Python3学习之路~2.2 简单的购物车程序 Python3学习之路~2.3 字符串操作 Python3学习之路~2.4 字典操作 Pytho ...
- Python3学习(3)-高级篇
Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 文件读写 源文件test.txt line1 line2 line3 读取文件内容 f = ope ...
- Python3学习(2)-中级篇
Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 切片:取数组.元组中的部分元素 L=['Jack','Mick','Leon','Jane','A ...
- Python3学习(1)-基础篇
Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 安装(MAC) 直接运行: brew install python3 输入:python3 --v ...
- s14 第4天 关于python3.0编码 函数式编程 装饰器 列表生成式 生成器 内置方法
python3 编码默认为unicode,unicode和utf-8都是默认支持中文的. 如果要python3的编码改为utf-8,则或者在一开始就声明全局使用utf-8 #_*_coding:utf ...
- Python3学习笔记 - 准备环境
前言 最近乘着项目不忙想赶一波时髦学习一下Python3.由于正好学习了Docker,并深深迷上了Docker,所以必须趁热打铁的用它来创建我们的Python3的开发测试环境.Python3的中文教程 ...
- python3学习笔记(7)_listComprehensions-列表生成式
#python3 学习笔记17/07/11 # !/usr/bin/env python3 # -*- conding:utf-8 -*- #通过列表生成式可以生成格式各样的list,这种list 一 ...
- python3学习笔记(6)_iteration
#python3 学习笔记17/07/10 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #类似 其他语言的for循环,但是比for抽象程度更高 # f ...
随机推荐
- [转]Oracle 10g如何对用户姓名,按首字母排序、查询
首先介绍Oracle 9i新增加的一个系统自带的排序函数 1.按首字母排序 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值 SCHINESE_RADICA ...
- id ,NSObject, id<NSObject>区别
转自:http://blog.csdn.net/happytengfei/article/details/11473931 我们经常会混淆以下三种申明(我是没有留意过): 1. id foo1; ...
- Centos7 安装Git-cola
首先安装Git sudo yum -y install git* 找到 git-all.noarch , 安装这个. sudo yum install git-all.noarch ========= ...
- UIViewController的生命周期及iOS程序执行顺序 和ios6 处理内存警告
当一个视图控制器被创建,并在屏幕上显示的时候. 代码的执行顺序1. alloc 创建对象,分配空间2.init (initWithN ...
- CSS 框架之 Bootstrap 的下载和安装
BootStrap 简介: Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 响应式设计:Bootst ...
- [system]c/c++调用cat命令
因为cat并不是一个带返回的命令,而是输出到标准输出.所以使用system("cat /sys/class/gpio/...."); 得不到我们想要的结果. 下面的/bin/ls同 ...
- hive表支持中文设置
默认创建表时说明中带有中文字段时会显示如下乱码信息: 解决方案: 在hive的元数据库中执行以下SQL语句,然后重新创建刚才的表即可 . ) character set utf8; ) charact ...
- Entity Framework(六):数据迁移
在前面的几篇文章中,简单的介绍了如何使用Entity Framework的Code First模式创建数据库,但是,在前面的几篇文章中,我们都是通过使用数据库初始化策略来做,也就是每次先删除数据库然后 ...
- MongoDB(一):关系型数据库和非关系型数据库
一.关系型数据库 1.概念 关系型数据库:是指采用了关系模型来组织数据的数据库,是目前各类数据库中使用最为广泛的数据库系统.简单的说,关系模型指的就是二维表格模型,一个关系型数据库就是由二维表及其之间 ...
- 关于Nvelocity的主要语法和一些代码示例
context.Response.ContentType = "text/html"; VelocityEngine vltEngine = new VelocityEngine( ...