bigfrog7 发表于 2014-08-14 00:46

汉字编码问题

linux环境,默认

>>> s='中文'
>>> s
'\xe4\xb8\xad\xe6\x96\x87'

请问这个'\xe4\xb8\xad\xe6\x96\x87'是什么编码?

Linux_manne 发表于 2014-08-14 09:35

unicode      

bigfrog7 发表于 2014-08-14 11:02

>>> s=u'中文'
>>> s
u'\u4e2d\u6587'
>>>

那这个呢?

Linux_manne 发表于 2014-08-14 11:43

本帖最后由 Linux_manne 于 2014-08-14 11:44 编辑

回复 3# bigfrog7


   在python中str和unicode在编码和解码过程中,如果将一个str直接编码成另一种编码,会先把str解码成unicode,采用的编码为默认编码,一般默认编码是anscii
>>> s='中文'
>>> x=u'中文'
>>> type(s)
<type 'str'>
>>> type(x)
<type 'unicode'>

Linux_manne 发表于 2014-08-14 11:46

然后unicode 对象可以转成自己需要的码
>>> x.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87'

bigfrog7 发表于 2014-08-14 19:01

回复 5# Linux_manne

感谢热情回答!

'\xe4\xb8\xad\xe6\x96\x87'应该是utf8编码
因为可以用utf8 decode:
>>> s
'\xe4\xb8\xad\xe6\x96\x87'
>>> s.decode('utf-8')
u'\u4e2d\u6587'
>>> print s.decode('utf-8')
中文
>>> s
'\xe4\xb8\xad\xe6\x96\x87'


u'\u4e2d\u6587'这应该是unicode编码

不知我说的对吗?

Gubuntu 发表于 2014-08-15 14:59

与你使用的telnet或ssh连接服务器的终端的设置有关。

这里应当是utf8,因为是6字节。如果是4字节的话应当是gbk。都是可以在终端上设置编码类型的。

Linux_manne 发表于 2014-08-15 16:25

回复 6# bigfrog7


    嗯 是的。。 主要是str 在python 内部都会转成unicode然后会 通过unicode 去转码

bigfrog7 发表于 2014-08-15 22:12

感谢大家解惑,谢谢!
页: [1]
查看完整版本: 汉字编码问题