python2编码unicode_unicode - 关于python2中的一个编码问题

本文探讨了Python2中遇到的一个编码问题,涉及unicode和utf-8的转换。通过示例代码展示在处理字符串时出现的乱码现象,并提出疑问:为何`u'xe5xb0x8fxe4xb8x89'.encode('utf-8')`不能正确输出‘小三’,而`u'小三'`则能直接正确显示和编码。文章最后提供了一段查找特定字节码的代码,展示了不同的搜索结果。
摘要由CSDN通过智能技术生成

# -*- coding: UTF-8 -*-

import chardet

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

a = u'\xe5\xb0\x8f\xe4\xb8\x89'

print type(a)

print a

print a.encode('utf-8')

b = u'小三'

print type(b)

print b

print b.encode('utf-8')

c = '\xe5\xb0\x8f\xe4\xb8\x89'

print chardet.detect(c)

print type(c)

print c

首先有几个基本概念我是了解的

* 第一行的注释指定的就是当前python脚本中所有字符串也就是str类型的编码格式

* python默认的解码格式是ascii需要用后面的三句话更改默认的解码格式也为utf-8

* str类型是需要解码之后再重新编码的

* unicode类型是不需要解码可以重新编码成其他的编码格式的

然后再来看下上面那段脚本的输出

å°ä¸

å°ä¸

小三

小三

{'confidence': 0.7525, 'encoding': 'utf-8'}

小三

我现在比较不解的是为什么

print a

print a.encode('utf-8')

这两句没有输出正确的结果,是乱码

print b

print b.encode('utf-8')

却输出了正确的结果

因为事实上u\xe5\xb0\x8f\xe4\xb8\x89就是小三的unicode码,为什么u\xe5\xb0\x8f\xe4\xb8\x89编码成utf-8依然无法正确输出小三,但是u小三这个unicode就可以正确输出并且不需要编码成utf-8都可以正确输出?

求各位高人解答

如何得到\xe5\xb0\x8f\xe4\xb8\x89这一串字节码的

# encoding: UTF-8

import re

import sys

print sys.getdefaultencoding()

reload(sys) # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入

sys.setdefaultencoding('utf-8')

pattern1 = re.compile(r'

.*?

')

pattern2 = re.compile(r'

.*

')

result = pattern1.findall('aa

test1

bb

test2

小三

cc')

print result

result = pattern2.findall('aa

test1

bb

test2

小三

cc')

print result

然后输出结果就是

ascii

['

test1

', '

test2

', '

\xe5\xb0\x8f\xe4\xb8\x89

']

['

test1

bb

test2

\xe5\xb0\x8f\xe4\xb8\x89

']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值