My next comment is just me not being exactly sure how micropython deals with strings internally. If they're UTF8, then shouldn't this being calling utf8_get_char and utf8_next_char rather than just incrementing an index?