通过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 ...
随机推荐
- mysql的show操作
SHOW CHARACTER SET 显示所有可用的字符集 SHOW CHARACTER SET; SHOW CHARACTER SET LIKE 'latin%'; SHOW COLLATION 输 ...
- blender, merge顶点
选择Edit Mode:,和vertex select: 同时选中两个要merge的顶点(同时选中多个顶点:http://www.cnblogs.com/wantnon/p/4526573.html) ...
- Atitit.软件gui按钮and面板---os区-----linux windows搜索文件 文件夹
Atitit.软件gui按钮and面板---os区-----搜索文件 1. Find 1 2. 寻找目录 1 3. 2. Locate// everything 1 4. 3. Whereis (wi ...
- poj 1611 The Suspects 并查集变形题目
The Suspects Time Limit: 1000MS Memory Limit: 20000K Total Submissions: 20596 Accepted: 9998 D ...
- visual studio 2013 触发挂起事件
在 VS2013 中调试 winddows phone 或者 win rt 程序的时候,需要手动触发 “挂起” 事件. 如果找不到这个按钮: 1.打开菜单栏中的 “自定义” 对话框: 2.选择调试位置 ...
- Windows Phone 推送通知的第四类推送
在 MSDN 文档有关 Windows Phone 推送通知 有关推送的内容包含 Tile.Toast.Raw 这三种通知.这三种通知 的方式类似,运用的场合不同,这里不再赘述,它们的运行原理类似: ...
- Hystrix的用法
package com.example.demo; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; imp ...
- 0072 Java中的泛型--泛型是什么--泛型类--泛型方法--擦除--桥方法
什么是泛型,有什么用? 先运行下面的代码: public class Test { public static void main(String[] args) { Comparable c=new ...
- Hive入门笔记---1.Hive简单介绍
1. Hive是什么 Hive是基于Hadoop的数据仓库解决方案.由于Hadoop本身在数据存储和计算方面有很好的可扩展性和高容错性,因此使用Hive构建的数据仓库也秉承了这些特性.这是来自官方的解 ...
- android版本号始终为1
之前用Eclipse里时,版本号是检查是做如下 <manifest xmlns:android="http://schemas.android.com/apk/res/android& ...