in tools/cloud/vision_system_data_serializer.py [0:0]
def pop_string(self, encoding):
length = self.pop_primitive(PRIMITIVE_TYPES["UINT32"])
code_unit_size = 1 if encoding == "utf-8" else 4
if len(self.buffer) < length * code_unit_size:
raise Exception("out of data")
raw_bytes = self.buffer[0 : length * code_unit_size]
self.buffer = self.buffer[length * code_unit_size :]
self.last_data_size = code_unit_size
self.current_position += len(raw_bytes)
# utf-16 mode stores the 16-bit utf-16 'code units' in 32-bit words:
if encoding == "utf-16":
utf16_bytes = raw_bytes
raw_bytes = bytearray()
while len(utf16_bytes) > 0:
raw_bytes += utf16_bytes[:2]
utf16_bytes = utf16_bytes[4:]
# utf-8 mode has a null-terminator:
return raw_bytes.decode(encoding).rstrip("\0")