码迷,mamicode.com
首页 > 其他好文 > 详细

文本和字节序列

时间:2018-02-12 11:15:30      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:class   字符   序列   占用   code   nic   down   一个   模式   

utf-8与unicode

在一般情况下,在内存中的使用的是unicode,而在存储或者传输时,使用的utf-8.因为utf-8是是不定长,可以减少存储的空间,或者传输时的带宽的占用.

如何理解编码与解码呢?

从 Python 3 的 str 对象中获取的元素是 Unicode 字符,这相当于从 Python 2 的 unicode 对象中获取的元素,而不是从Python 2 的 str 对象中获取的原始字节序列。

>>> s = ‘café‘
>>> len(s) # ?
4
>>> b = s.encode(‘utf8‘) # ?
>>> b
b‘caf\xc3\xa9‘ # ?
>>> len(b) # ?
5
>>> b.decode(‘utf8‘) # ?
‘café
  • 变量s是一个unicode编码,需要将它转换成字节序列,需要对它进行编码.这里,可以想想数据通信时,也不是需要编码的吗?.encode()
  • 字节序列需要解码,.decode()

处理文本文件

技术分享图片
要尽早把输入(例如读取文件时)的字节序列解码成字符串。这种三明治中的“肉片”是程序的业务逻辑,在这里只能处理字符串对象。在其他处理过程中,一定不能编码或解码。对输出来说,则要尽量晚地把字符串编码成字节序列。多数 Web 框架都是这样做的,使用框架时很少接触字节序列。例如,在 Django 中,视图应该输出 Unicode 字符串; Django 会负责把响应编码成字节序列,而且默认使用 UTF-8 编码。
内置的 open 函数会在读取文件时做必要的解码,以文本模式写入文件时还会做必要的编码,所以调用 my_file.read()方法得到的以及传给 my_file.write(text) 方法的都是字符串对象。
但是有时候,不指定编码可能会发生错误.

>>> open(‘cafe.txt‘, ‘w‘, encoding=‘utf_8‘).write(‘café‘)
4
>>> open(‘cafe.txt‘).read()  # 如果这里的系统默认编码不是utf-8,则会出现问题
‘caf??‘

文本和字节序列

标签:class   字符   序列   占用   code   nic   down   一个   模式   

原文地址:https://www.cnblogs.com/yuanoung/p/8443791.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!