将中文ascii字符串转换为中文字符串

时间:2016-03-03 04:52:00

标签: python encoding ascii windows-10

我尝试使用sys模块设置默认编码来转换字符串,但它不起作用。

字符串为:

`\xd2\xe6\xc3\xf1\xba\xcb\xd0\xc4\xd4\xf6\xb3\xa4\xbb\xec\xba\xcf`

中文意思是益民核心增长混合。但是如何将其转换为中文字符串?

我试过了:

>>> string = '\xd2\xe6\xc3\xf1\xba\xcb\xd0\xc4\xd4\xf6\xb3\xa4\xbb\xec\xba\xcf'
>>> print string.decode("gbk")
益民核心增长混合  # As you can see here, got the right answer
>>> new_str = string.decode("gbk")
>>> new_str
u'\u76ca\u6c11\u6838\u5fc3\u589e\u957f\u6df7\u5408' # It returns the another encode type.
>>> another = u"益民核心增长混合"
>>> another
u'\u76ca\u6c11\u6838\u5fc3\u589e\u957f\u6df7\u5408' # same as new_str

所以,我只是对这种情况感到困惑,为什么我可以打印string.decode("gbk")但我的python控制台中的new_str只返回另一种编码类型?

我的操作系统是Windows 10,我的Python版本是Python 2.7。非常感谢你!

1 个答案:

答案 0 :(得分:1)

你正确地做到了。

在这种情况下,new_str实际上是一个 unicode 字符串,由u前缀表示。

>>> new_str
u'\u76ca\u6c11\u6838\u5fc3\u589e\u957f\u6df7\u5408' # It returns the another encode type.

解码GBK编码的字符串时,会得到一个unicode字符串。该字符串的每个字符都是一个unicode代码点,例如

>>> u'\u76ca'
u'\u76ca'
>>> print u'\u76ca'
益
>>> import unicodedata
>>> unicodedata.name(u'\u76ca')
'CJK UNIFIED IDEOGRAPH-76CA'

>>> print new_str
益民核心增长混合
>>> print repr(new_str)
u'\u76ca\u6c11\u6838\u5fc3\u589e\u957f\u6df7\u5408

这就是Python在解释器中显示unicode字符串的方式 - 它使用repr来显示它。但是当你打印字符串时,Python会转换为终端的编码(sys.stdout.encoding),这就是字符串显示的原因。

因此,它不是字符串的不同编码,它只是Python在解释器中显示字符串的方式。