通过另一个系统的cStringIO,我通过以下方式编写了一些unicode:
u'content-length'.encode('utf-8')
并在使用 , 阅读此内容时unicode( stringio_fd.read(),'utf-8')
,我得到:
u'c\x00\x00\x00o\x00\x00\x00n\x00\x00\x00t\x00\x00\x00e\x00\x00\x00n\x00\x00\x00t\x00\x00\x00-\x00\x00 \x00l\x00\x00\x00e\x00\x00\x00n\x00\x00\x00g\x00\x00\x00t\x00\x00\x00h\x00\x00\x00'
在终端中打印上面的内容给了我正确的价值,但当然,我不能做任何有用的事情:
打印 unicode("c\x00\x00\x00o\x00\x00\x00n\x00\x00\x00t\x00\x00\x00e\x00\x00\x00n\x00\x00\x00t\x00\x00\x00-\x00 \x00\x00l\x00\x00\x00e\x00\x00\x00n\x00\x00\x00g\x00\x00\x00t\x00\x00\x00h\x00\x00\x00")
内容长度
打印 unicode("c\x00\x00\x00o\x00\x00\x00n\x00\x00\x00t\x00\x00\x00e\x00\x00\x00n\x00\x00\x00t\x00\x00\x00-\x00 \x00\x00l\x00\x00\x00e\x00\x00\x00n\x00\x00\x00g\x00\x00\x00t\x00\x00\x00h\x00\x00\x00") == u'内容长度'
错误的
将此字符串转换为等效于的字符串的最快、最便宜的方法是u'content-type'
什么?我不能从 cStringIO 改变
更新
虽然 philhag 的回答是正确的,但问题似乎是:
StringIO.StringIO(u'content-type').getvalue().encode('utf-8')
'内容类型'
StringIO.StringIO(u'content-type').getvalue().encode('utf-8').decode('utf-8')
u'内容类型'
cStringIO.StringIO(u'content-type').getvalue().encode('utf-8').decode('utf-8')
u'c\x00\x00\x00o\x00\x00\x00n\x00\x00\x00t\x00\x00\x00e\x00\x00\x00n\x00\x00\x00t\x00\x00\x00-\x00\x00 \x00t\x00\x00\x00y\x00\x00\x00p\x00\x00\x00e\x00\x00\x00'
cStringIO.StringIO(u'content-type').getvalue().encode('utf-8').decode('utf-8').decode('utf-32')
u'内容类型'