最讨厌Python 2.x的编码问题了


类型:Python,创建时间:Jan. 1, 2012, 12:29 p.m.

标题无“转载”即原创文章,版权所有。转载请注明来源:http://hgoldfish.com/blogs/article/47/。

本粗人在写程序的时候习惯这样子:

print "中文"

显然,这个写法是不具可移植性的。因为,在windows下默认编码是gbk,在很多linux下面默认编码是utf-8。如果源代码的编码是gbk,在windows下可以工作得很好,如果源代码是utf-8,在windows下会打印出一堆乱码。好一点的作法是

print u"中文"

这样的话,在不论源代码的编码是什么,也不论操作系统是什么,都可以打印出正确的字符。可是如果这样子就麻烦了:

name=third_party_module.get_system_username()
print u"你好,%s"%name

third_party_module.get_system_username()返回一个当前登录的用户真实名字。但是他返回的到底是什么编码的我们不知道。因为unicode()函数默认使用当前系统的默认编码。倘若name的编码与当前系统默认的一样,一切OK。如果不一样,问题就麻烦了。幸好返回时使用的一般是当前系统默认编码。

最麻烦的:

name=third_party_module.get_system_username()
client_socket.send(name)

字符串被发送到网络上,到达运行着不同操作系统的远程主机上。远程的主机怎么知道这是什么编码呢?最近经常遇到这样的问题,实在很郁闷。

标题无“转载”即原创文章,版权所有。转载请注明来源:http://hgoldfish.com/blogs/article/47/。


tk86935367(Nov. 3, 2014, 4:21 p.m.)

使用sys.stdin.encoding,不谢。

详解可与我交流: QQ:86935367


何不来发表一下您对本文的看法(使用Markdown语法,分段空两行):