# -*- 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
bbtest2
小三
cc')print result
result = pattern2.findall('aa
test1
bbtest2
小三
cc')print result
然后输出结果就是
ascii
['
test1
', 'test2
', '\xe5\xb0\x8f\xe4\xb8\x89
']['
test1
bbtest2
\xe5\xb0\x8f\xe4\xb8\x89
']