Effective Python 读书笔记: 3 了解bytes、str与unicode的区别

# -*- encoding: utf-8 -*-

import sys

'''

第3条: 了解bytes、str与unicode的区别

关键:
1 字符序列
python2:
str: 二进制序列
unicode: unicode序列
str转unicode: 用decode('utf-8'),从二进制解码为正常字符串
unicode转: 用encode('utf-8'),将正常字符串编码为二进制序列

python3:
bytes: 二进制序列
str: unicode序列
bytes转str: 用decode('utf-8'),从二进制解码为正常字符串
str转bytes: 用encode('utf-8'),将正常字符串编码为二进制序列

2 向文件中读写二进制数据应该用rb或wb
python3中 写入文件用with open('xx.txt', 'wb') as f:
不要用with open('xx.txt', 'w') as f:
这样可以解决python3无法向文件中写入二进制内容的问题
rb同理。

3 对输入数据操作之前,使用辅助函数保证字符序列的类型是期望类型

参考:
Effectiv Python 编写高质量Python代码的59个有效方法

'''

def to_str(strOrUnicode):
    if isinstance(strOrUnicode, unicode):
        strOrUnicode = strOrUnicode.encode('utf-8')
    return strOrUnicode


def to_unicode(strOrUnicode):
    if isinstance(strOrUnicode, str):
        strOrUnicode = strOrUnicode.decode('utf-8')
    return strOrUnicode


def process():
    value = "hello world"
    print type(value)
    result = to_str(value)
    print result
    print type(result)
    print "###### \n"

    value = u"hello world"
    print type(value)
    result = to_str(value)
    print result
    print type(result)
    print "###### \n"

    value = "hello world"
    print type(value)
    result = to_unicode(value)
    print result
    print type(result)
    print "###### \n"

    value = u"hello world"
    print type(value)
    result = to_unicode(value)
    print result
    print type(result)


if __name__ == "__main__":
    process()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值