【python学习笔记】浅探编码

1、当我们在脚本里写一个字符串时,在显示器上显示的这个字符串到底是什么?

1.1 数字

txt = '123'
print txt
print type(txt)
print chardet.detect(txt)

输出正常,看显示出来的结果,计算机认为'123'是个字符串,这个字符串的编码是'ascii'。

1.2 英文

txt = 'abc'
print txt
print type(txt)
print chardet.detect(txt)

输出正常,看显示出来的结果,计算机认为'abc'还是个字符串,这个字符串的编码还是'ascii'。

1.3 中文

txt = '黯然3叠浪'
print txt
print type(txt)
print chardet.detect(txt)

我们看到了一堆乱码,但这堆乱码仍然被计算机认为是字符串,编码是个叫'utf-8'的东西。
utf-8 是啥?简单的理解就是计算机记录字符串的一种编码方式,计算机以这种方式记录中文,它实际记的就是那一堆乱码(在计算机看来不乱)。
同样的还有gb2312等编码。


小结:直接向计算机输入的引号之间的内容(包括数字、英文、中文)都是字符串(str),计算机以不同的编码方式记录和识别它们,通常数字和英文编码是ascii,中文编码是utf-8等。


2、计算机识别的字符串和人类识别的字符串不一样,咋办?

2.1 翻译

有一种编码,在这种编码体系下,人类与计算机看到的东西是一致的,这个编码的名字叫:unicode。
只要把我们写的字符串翻译成unicode,乱码就终于可以滚了。

2.2 如何翻译

简单的译法:
在字符串前加u,如:txt = u'黯然3叠浪'
精准的译法:
运用decode和encode:
decode:把其他编码类型的字符串(需明确编码类型)转换成unicode
encode:把unicode转换成其他编码类型的字符串
已知之前写的字符串'黯然3叠浪'编码类型为'utf-8',转换成unicode,即 txt = '黯然3叠浪'.decode('utf-8')

2.3 翻译的结果

txt = '黯然3叠浪'
txt = txt.decode('uft-8')
print txt
print type(txt)

乱码消失,输出正常,但这个时候再看显示出来的结果,计算机不再认为这个显示出来的'黯然3叠浪'是个字符串了,而是一个叫'unicode'的东西。


3、str与unicode的关系

特别明确的关系,作为外行人我说不清,虽然看起来是一个东西,但用isinstance或type判定,从结果上看,str(字符串)与unicode是对立的,没有包含、交集之类的东西。
同一个str可以有不同的编码类型,用chardet.detect(txt)可以查看这个str的编码类型;
unicode就是unicode,chardet.detect不可以操作unicode。


结论和提醒:

1. 搞清写下或看到的每一个“字符串”是str还是unicode;

2. 如果是str,搞清它的编码是ascii还是utf-8还是gb2312;

3. 鉴于unicode表示的东西和人类看到的东西一致,涉及str时,一律转成unicode!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值