def pop_string()

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")