def utf8_uri_encode(utf8_string, length=0): unicode = '' values = [] num_octets = 1 unicode_length = 0 string_length = len(utf8_string) for i in range(0, string_length): value = ord(utf8_string[i]) if value < 128: if length and (unicode_length >= length): break unicode += chr(value) unicode_length += 1 else: if len(values) == 0: if value < 224: num_octets = 2 elif value < 240: num_octets = 3 else: num_octets = 4 values.append(value) if length and ((unicode_length + (num_octets * 3)) > length): break if len(values) == num_octets: for j in range(0, num_octets): unicode += '%' + hex(values[j]) unicode_length += num_octets * 3 values = [] num_octets = 1 return unicode