def read_unicodestring4(f):
r"""
# bug 24549
#>>> import StringIO
#>>> s = u'abcd\uabcd'
#>>> enc = s.encode('utf-8')
#>>> enc
#'abcd\xea\xaf\x8d'
#>>> n = chr(len(enc)) + chr(0) * 3 # little-endian 4-byte length
#>>> t = read_unicodestring4(StringIO.StringIO(n + enc + 'junk'))
#>>> s == t
#True
#
#>>> read_unicodestring4(StringIO.StringIO(n + enc[:-1]))
#Traceback (most recent call last):
#...
#ValueError: expected 7 bytes in a unicodestring4, but only 6 remain
"""
n = read_int4(f)
if n < 0:
raise ValueError("unicodestring4 byte count < 0: %d" % n)
data = f.read(n)
if len(data) == n:
return unicode(data, 'utf-8')
raise ValueError("expected %d bytes in a unicodestring4, but only %d "
"remain" % (n, len(data)))
评论列表
文章目录