2014-02-16 60 views
0
# -*- coding: utf8 -*- 
s = '\xd6\xd0\xce\xc4' 
print s 

的代码打印打印将字符串转换为Python中的Unicode?

中文 

不期望其摘录。从字典中我可以看到s不是一些ASCII字符,因为序号大于128.但是这就是为什么print会自动将字符串解码为utf8并打印出来(根据最初的编码语句)?

更新:

我宣布为gbk的编码,但保留文件的编解码器为UTF8。一个异常引发:

SyntaxError: 'gbk' codec can't decode bytes in position 8-9: illegal multibyte s 
equence 

这表明一个编解码转换失败。哪里?

回答

2

在Python 2.x中,print正好打印出你给它的字节串。你终于看到取决于你的终端如何解释字节串。显然你的终端设置为gb2312编解码器,它给出你看到的结果。

+0

这就是问题所在,我从'gbk'解码。字节是'gbk'编解码器。但上面的代码可以正确运行并打印原始字符。 – zoujyjs

+0

编解码器变换必定发生在某处。这就是为什么我猜测印刷品完成了这项工作。查看我的更新。 – zoujyjs

+0

@zoujyjs:嗯,我只能重复一遍自己:Python 2.x中的'print'会将你给它的字节发送给终端。然后你的终端将使用一些编解码器来解释它的输入,但它不在终端用它获得的字节做什么的Python控制之下。如果一切设置正确,'sys.stdout.encoding'应该显示你的终端使用什么编解码器(或假装使用)。 –

0

如果您确实希望按照声明进行打印,请尝试print repr(s)

相关问题