哪位大神帮忙解释下为什么python的socket.send不能发送unicode码流?

RoT__ 发布于 2015/03/10 16:09
阅读 1K+
收藏 0
测试代码如下:
server.py
----------------------------------------------
import socket, sys

reload(sys)
#sys.setdefaultencoding('utf-8')

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host = socket.gethostname()
port = 5020
s.bind(('10.0.2.77', port))

s.listen(5)

while True:
    c, addr = s.accept()
    print 'Got connect from', addr
    se = u'\u6C49'
    print se, isinstance(se, unicode), type(se), repr(se), sys.getdefaultencoding(), sys.getfilesystemencoding()
    c.send(se)
    c.close()

客户端:
import socket

s = socket.socket()

host = socket.gethostname()
port = 5020

s.connect(('10.0.2.77', port))
re = s.recv(1024)
#print re

print repr(re)
#print unicode(re, 'utf-8')
s.close()

输出结果:
服务端>>
Got connect from ('10.0.2.77', 31773)
汉 True <type 'unicode'> u'\u6c49' utf-8 mbcs

客户端>>

'\xe6\xb1\x89'


PS:网络抓包和客户端显示发送的码流变成了utf-8编码了

加载中
0
Xsank
Xsank
se本身还是unicode,只是你调用print显示的话会是汉字
R
RoT__
我抓过网络数据包,里面传的还是utf-8码流,另外如果我设置系统默认编码为gbk的话,网络码流传的就是gbk码流了。
0
Haggard
Haggard
Python 在默认处理就是str.
Haggard
Haggard
回复 @RoT__ : 首先你得弄懂UTF-8和Unicode不是一个概念.
R
RoT__
大神能不能详细说下和这个问题有什么关系。
返回顶部
顶部