Python 编码和系统编码问题。

2017-04-14 20:38:50 +08:00
 fxxkgw

情形 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 的关系呢。

2190 次点击
所在节点    Python
8 条回复
zhihaofans
2017-04-15 00:15:18 +08:00
→python3
coolair
2017-04-15 00:37:14 +08:00
.decode('gbk')
fy
2017-04-15 00:54:17 +08:00
我认为是你输入的值有了问题,不然你看看 len(i) 是怎样?
wwqgtxx
2017-04-15 11:11:18 +08:00
快转换到 python3 吧,别在编码问题上死磕了
SuT2i
2017-04-15 21:13:59 +08:00
Python3 没有这些问题。。
dant
2017-04-15 23:41:13 +08:00
LC_ALL=C 时, Python 不知道你输入的字面量是什么编码,于是默认 ISO-8859-1 。
encode 的时候,就按 ISO-8859-1 -> UTF-8 的规则转换了。
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
lzjun
2017-04-16 04:19:51 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/354955

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX