python2.7.x的字符串编码到底什么鬼?(中文和英文的处理)
一直以来我其实一直对python的编码弄得非常晕,能正常编码,也能处理一些情况。但是始终不明白有些问题究竟为何出,原因是什么,为什么要这样用。
今天晚上正好好好研究了一番解答了自己心中的困惑。
Q:python2.7.x里面的中文表示到底是什么鬼?
A:直接来看看
In [23]: x = '好不好喝都要喝' In [24]: x
Out[24]: '\xe5\xa5\xbd\xe4\xb8\x8d\xe5\xa5\xbd\xe5\x96\x9d\xe9\x83\xbd\xe8\xa6\x81\xe5\x96\x9d'
这个x打印值相信熟悉编码的盆友都知道,这是utf-8编码。也就是说python2.7.x 在默认情况下将中文默认转到了utf-8编码。
这里type(x)得到结果是str
Q:python2.7.x里的unicode究竟什么鬼?
A:还是通过例子来看看
In [16]: x = u'好不好喝就很好喝' In [17]: type(x)
Out[17]: unicode
在2.7.x在中,u写在字符串前面将会将一个字符串转成unicode对象。
Q:python2.7.x中unicode可以和str相加吗?
A:还是来看例子
In [62]: z = '好不好喝' In [63]: x = u'好不好喝都要喝' In [64]: z+x
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-64-f964ff206363> in <module>()
----> 1 z+x UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
熟悉的报错,可见在python2.7.x中,unicode中文和utf8中文是不能相加的因为是不同类型。
Q:那么英文字符串可以相加吗?
A:可以。具体就不掩饰了大家可以自己试试。而且最终得到的结果会被转成全unicode
这两个库在对无论utf8还是unicode对象进行中文编码的时候,都会将内容转成unicode再编码。最后你拿到结果decode之后就变成了unicode对象,想要再拿到utf8对象,就需要再encode一次才可以了。
一不注意就踩坑。
python2.7.x的字符串编码到底什么鬼?(中文和英文的处理)的更多相关文章
- php 字符串截取,支持中文和其他编码
function.php //使用方法 $content= mb_substr($content,0,25,'utf-8'); /** * 字符串截取,支持中文和其他编码 * @static * @a ...
- 我的Java开发学习之旅------>工具类:Java使用正则表达式分离出字符串中的中文和英文
今天看到一个工具类使用正则表达式将一大段字符串中的中文和英文都分离出来了,在此记录一下,读者可以收藏! import java.util.ArrayList; import java.util.Col ...
- Python2和Python3的字符串编码和类型
一.字符串编码和类型 任何编码格式的字符串,都可以和Unicode互相转换. gbk -> utf8 # 将字符串按指定格式进行解码,返回Unicode字符串unicode_str = gbk_ ...
- JS判断字符串长度的5个方法(区分中文和英文)
目的:计算字符串长度(英文占1个字符,中文汉字占2个字符) 方法一: 代码如下: String.prototype.gblen = function() { var len = 0; fo ...
- C#获取字符串字符的位数(区分中文和英文长度)
请看以下代码 1 private static int GetStrLength(string str) 2 { 3 if (string.IsNullOrEmpty(str)) return 0; ...
- java是用utf-16be编码方式编的。中文和英文都是两个字节
- Python2和Python3中的字符串编码问题解决
Python2和Python3在字符串编码上是有明显的区别. 在Python2中,字符串无法完全地支持国际字符集和Unicode编码.为了解决这种限制,Python2对Unicode数据使用了单独的字 ...
- 基于Python的数据分析(2):字符串编码
在上一篇文章<基于Python的数据分析(1):配置安装环境>中的第四个步骤中我们在python的启动步骤中强制要求加载sitecustomize.py文件并设置其默认编码为"u ...
- Python的字符串编码
本文用实验详细地演示了Python2和Python3在字符串编码上的区别. 在Python2中,字符串字面量对应于8位的字符或面向字节编码的字节字面量.这些字符串的一个重要限制是它们无法完全地支持国际 ...
随机推荐
- python基础学习第六天
import os #文件读写 不用自动关闭with open('test.txt','r') as f: #一次性读取所有 data = f.read() #print(data)print('-- ...
- 扫盲记-第六篇--Normalization
深度学习模型中的Normalization 数据经过归一化和标准化后可以加快梯度下降的求解速度,这就是Batch Normalization等技术非常流行的原因,Batch Normalization ...
- POJ2236
https://vjudge.net/problem/POJ-2236 An earthquake takes place in Southeast Asia. The ACM (Asia Coope ...
- 《Head First 设计模式》[02] 观察者模式
1.观察者模式 1.1 形象地认识观察者模式 报社的业务是出版报纸 用户像某家报社订阅了报纸,那么一旦报社有新的报纸,就会送到用户处.只要是订户,就一直会收到新报纸: 当用户不再想看报纸时,取消订阅, ...
- USB协议枚举过程详解
一 枚举过程之文字描述 ?主机集线器监视着每个端口的信号电压,当有新设备接入时便可觉察.(集线器端口的两根信号线的每一根都有15kΩ的下拉电阻,而每一个设备在D+都有一个1.5kΩ的上拉电阻.当用US ...
- 苹果与Windows双系统时间不同步的解决办法
步骤:打开C盘>Windows>System32,找到cmd.exe,右键以管理员的身份运行. Reg add HKLM\SYSTEM\CurrentControlSet\Control\ ...
- NOIP2002-2017提高组题解
给个人认为比较难的题目打上'*' NOIP2002(clear) //一个很吼的贪心题,将平均数减掉之后从左往右将影响消除 #include<bits/stdc++.h> using na ...
- Ionic buid android下的此工程不是一个android项目问题
今天编译Ionic项目的时候报如下错误,甚是费解,之前一直都是好的 首先去检查了,相关JavaHome的环境变量,确定是好的,java -version 命令没有问题. 经查阅网上的解决方法,思路大都 ...
- [Oralce][InMemory]如何确定一个表已经被Populate 到In Memory 中?
[Oralce][InMemory]如何确定一个表已经被Populate 到In Memory 中? 以如下方法来查看 POPULATE_STATUS 是不行的. SQL> select ins ...
- J-query extend()方法
1.如果没有冲突参数会弥在后面. 2.参数如果和前面的参数存在相同的名称,那么后面的会覆盖前面的参数值.