a = '王'
>>> a
'\xe7\x8e\x8b'
>>> len(a)
3
>>> type(a)
<type 'str'>
>>> print a
王
# a.decode(), 默认为ASCII码会报错,需:
>>> a.decode('utf-8')
u'\u738b' # 解码为unicode码
即python2输入汉字自动按utf-8(unicode)编码成字节流, 但对于a这个对象还是当做str来看, print的时候也会对字节流做处理. 当喂给bytes_feature时需要decode成utf-8(unicode)
>>> val
'Lines:\nI lost\nKevin '
>>> len(val)
20
>>> type(val)
<class 'numpy.str_'>
>>> re.split("[ \n]", val.strip())
['Lines:', 'I', 'lost', 'Kevin']
# 当输入为英文字符串时
>>> x = re.split("[ \n]", val.strip())[0]
>>> x
'Lines:'
>>> type(x)
<class 'str'>
>>> len(x)
5
>>> x.encode('ascii')
b'Lines:'
>>> x.encode('utf-8')
b'Lines:'
# 当输入字符为汉字时
>>> x = '王'
>>> x
'王'
>>> type(x)
<class 'str'>
>>> len(x)
1
>>> x.encode('utf-8')
b'\xe7\x8e\x8b'
可见在python3中, 对英文字符串默认使用ASCII码进行编码, 对汉字默认使用utf-8进行编码, 二者均视为str类型, 对每一个字符char看做一个个体, 长度len()取决于字符数量. 但是进行编码时就可发现英文字符串只是加了一个b'', 中文是直接编码成两字节十六位的utf-8编码(即unicode), 使用三字节模板则为三个十六进制数.
这是因为utf-8前127位包含ASCII码, 所以对英文使用utf-8编码来说是一样的
网友评论