情形 1 : LC_ALL="en_US.UTF-8"
>>>i=u'呵呵'
>>>i
u'\u5475\u5475'
>>>i.encode('utf-8')
'\xe5\x91\xb5\xe5\x91\xb5'
>>>type(i)
<type 'unicode'>
情形 2 : LC_ALL=C
>>> i=u'呵呵'
>>> i
u'\xe5\x91\xb5\xe5\x91\xb5' #这是什么鬼??
>>> type(i)
<type 'unicode'>
>>> i.encode('utf-8')
'\xc3\xa5\xc2\x91\xc2\xb5\xc3\xa5\xc2\x91\xc2\xb5'
唯一的区别就是 LC_ALL 了,所以谁能详细解释下这个编码与 LC_ALL 的关系呢。
1
zhihaofans 2017-04-15 00:15:18 +08:00 via iPhone
→python3
|
2
coolair 2017-04-15 00:37:14 +08:00 via Android
.decode('gbk')
|
3
fy 2017-04-15 00:54:17 +08:00
我认为是你输入的值有了问题,不然你看看 len(i) 是怎样?
|
4
wwqgtxx 2017-04-15 11:11:18 +08:00 via iPhone
快转换到 python3 吧,别在编码问题上死磕了
|
5
SuT2i 2017-04-15 21:13:59 +08:00
Python3 没有这些问题。。
|
6
dant 2017-04-15 23:41:13 +08:00
LC_ALL=C 时, Python 不知道你输入的字面量是什么编码,于是默认 ISO-8859-1 。
encode 的时候,就按 ISO-8859-1 -> UTF-8 的规则转换了。 |
7
dant 2017-04-15 23:45:51 +08:00
纠正一下,是解析 u'呵呵' 的时候把 “呵呵” 的 UTF-8 表示( E5 91 B5 E5 91 B5 )当作 ISO-8859-1 编码转换为 Unicode codepoint 序列( U+00E5 U+0091 U+00B5 U+00E5 U+0091 U+00B5 )了.
encode 的时候,就是把上面提到的那个 Unicode codepoint 序列编码成 UTF-8 |
8
lzjun 2017-04-16 04:19:51 +08:00
|