简介

今天在写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其实根本遇不到这个问题

最新文章

  1. jquery插件开发继承了jQuery高级编程思路
  2. Bungee Jumping[HDU1155]
  3. EF并非我们想象的那么智能
  4. 常见的js 里对数字进行处理的函数方法集合
  5. Linux安装、卸载软件
  6. php 301
  7. part 3 Controllers in AngularJS
  8. 安卓接入ShareSDK问题
  9. 【POJ】2513 Colored Sticks
  10. TransactionTemplate编程式事务管理方式的进阶使用---自定义拓展模板类
  11. Maven(三)在Eclipse中使用Maven与Maven坐标
  12. CRM之分页
  13. CDH 报错:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-11: ordinal not in range
  14. compileSdkVersion,minSdkVersion 和 targetSdkVersion
  15. 213. Orchard学习 二 3、001.IOrchardHost 与Autofac
  16. python之鸭子类型
  17. C++ 使用VS2010创建MFC ActiveX工程项目
  18. jquery mobile两个页面以及源码(登录与注册) 转
  19. JAVA中动态编译的简单使用
  20. 一个事件激活多个JavaScript函数

热门文章

  1. mysql group replication 安装&配置详解
  2. laravel多条件查询,及分页
  3. Linux 硬链接和软链接
  4. tornado WebSocket详解
  5. matlab保存画框图像去白边
  6. sass初学入门笔记(一)
  7. Mac下Selenium无法最大化Chrome解决方案
  8. SQL Server 2008 允许远程链接 解决方法
  9. [转]JavaScript放在<head>和<body>的区别
  10. mysql5.5和5.6版本间的坑