通过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 ...
随机推荐
- mark v1 SecurityConfig
package cn.efunbox.cms.configuration; import cn.efunbox.afw.core.entity.ApiCode; import cn.efunbox.a ...
- Repository模式(转载)
近来发现很多ASP.NET MVC的例子中都使用了Repository模式,比如Oxite,ScottGu最近发布的免费的ASP.NET MVC教程都使用了该模式.就简单看了下. 在<企业架构模 ...
- centos vsftp 500 OOPS: cannot change directory
CentO中把vsftpd安裝配置好了,以為大功告成,但用FTP 登入出現下錯誤:500 OOPS: cannot change directoryCentOS系統安裝了SELinux,因為預設下是沒 ...
- Java数据结构和算法(二):数组
上篇博客我们简单介绍了数据结构和算法的概念,对此模糊很正常,后面会慢慢通过具体的实例来介绍.本篇博客我们介绍数据结构的鼻祖——数组,可以说数组几乎能表示一切的数据结构,在每一门编程语言中,数组都是重要 ...
- Atitit.mysql oracle with as模式临时表模式 CTE 语句的使用,减少子查询的结构性 mssql sql server..
Atitit.mysql oracle with as模式临时表模式 CTE 语句的使用,减少子查询的结构性 mssql sql server.. 1. with ... as (...) 在mys ...
- CentOS 7.0 关闭firewalld防火墙指令 及更换Iptables防火墙
CentOS 7.0 关闭firewalld防火墙指令 及更换Iptables防火墙 时间:2014-10-13 19:03:48 作者:哎丫丫 来源:哎丫丫数码网 查看:11761 评论:2 ...
- 每日英语:Online Education a New Frontier in China
In a country as obsessed with education as China, it makes sense that online teaching has huge poten ...
- 使用JSON Web Tokens和Spring实现微服务
http://www.jdon.com/dl/best/json-web-tokens-spring-cloud-microservices.html
- Mysql变量声明与使用
set @today='2017-04-25';set @ydate=DATE_SUB(@today, INTERVAL 7 day);select @today, @ydate; 待续....
- std::string与output-operator"<<"的兼容问题
经查阅资料得知,“在某些编译器下std::string,需要使用c_str()才能作为output-operator "<<" 的参数” std::string tit ...