来自cStringIO的Python"\ x00"填充/ utf-32字符串

Aid*_*ell 1 python unicode

通过另一个系统的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'content-length'

将此字符串转换为等效于字符串的最快,最便宜的方法是u'content-type'什么?我无法改变cStringIO


更新

虽然philhag的答案是正确的,但似乎问题是:

StringIO.StringIO(u'content型 ').的GetValue().编码(' UTF-8' )

'内容类型'

StringIO.StringIO(u'content型 ').的GetValue().编码(' UTF-8 ').解码(' UTF-8' )

u'content型"

cStringIO.StringIO(u'content型 ').的GetValue().编码(' UTF-8 ').解码(' 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型 ').的GetValue().编码(' UTF-8 ').进行解码(' UTF-8 ').解码(' UTF-32' )

u'content型"

phi*_*hag 5

一路上的事情是将您的值编码为UTF-32.简单地解码它们:

>>> b = u"c\x00\x00\x00o\x00\x00\x00n\x00\x00\x00t\x00\x00\x00e\x00\x00\x00\
... n\x00\x00\x00t\x00\x00\x00-\x00\x00\x00l\x00\x00\x00e\x00\x00\x00\
... n\x00\x00\x00g\x00\x00\x00t\x00\x00\x00h\x00\x00\x00"
>>> b.decode('utf-32')
u'content-length'
Run Code Online (Sandbox Code Playgroud)