unicode - 关于python2中的一个编码问题
PHPz
PHPz 2017-04-17 11:51:45
[Python讨论组]
# -*- 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

']
PHPz
PHPz

学习是最好的投资!

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号