Dưới đây là một chức năng ví dụ mà có thể tạo ra một tốt được hình thành chuỗi UTF-8 ngẫu nhiên, theo quy định tại Bảng 3-7 của Unicode 5.0.0:
#!/usr/bin/env python3.1
# From Table 3–7 of the Unicode Standard 5.0.0
import random
def byte_range(first, last):
return list(range(first, last+1))
first_values = byte_range(0x00, 0x7F) + byte_range(0xC2, 0xF4)
trailing_values = byte_range(0x80, 0xBF)
def random_utf8_seq():
first = random.choice(first_values)
if first <= 0x7F:
return bytes([first])
elif first <= 0xDF:
return bytes([first, random.choice(trailing_values)])
elif first == 0xE0:
return bytes([first, random.choice(byte_range(0xA0, 0xBF)), random.choice(trailing_values)])
elif first == 0xED:
return bytes([first, random.choice(byte_range(0x80, 0x9F)), random.choice(trailing_values)])
elif first <= 0xEF:
return bytes([first, random.choice(trailing_values), random.choice(trailing_values)])
elif first == 0xF0:
return bytes([first, random.choice(byte_range(0x90, 0xBF)), random.choice(trailing_values), random.choice(trailing_values)])
elif first <= 0xF3:
return bytes([first, random.choice(trailing_values), random.choice(trailing_values), random.choice(trailing_values)])
elif first == 0xF4:
return bytes([first, random.choice(byte_range(0x80, 0x8F)), random.choice(trailing_values), random.choice(trailing_values)])
print("".join(str(random_utf8_seq(), "utf8") for i in range(10)))
Bởi vì sự rộng lớn của các tiêu chuẩn Unicode Tôi không thể kiểm tra kỹ lưỡng. Cũng lưu ý rằng các ký tự không phân bố đều nhau (nhưng mỗi byte trong chuỗi là).
Điều này có thể hữu ích nếu bạn cung cấp thêm chi tiết về "kiểm tra xử lý mã Unicode của tôi" và giải thích phần tạo chuỗi UTF-8 ngẫu nhiên là gì trong thử nghiệm đó và bạn coi là "toàn bộ phạm vi Unicode" (16 bit? 21 bit? không thay thế mã-điểm? chars hợp lệ (ví dụ không phải U + FFFF)?). Bạn có tin cậy bộ mã hóa Python UTF-8 hay bạn cũng cần kiểm tra nó? Python 2.X hoặc 3.X hoặc cả hai? –
Mục tiêu là chấp nhận bất kỳ điểm mã Unicode (ký tự) có thể in, hợp lệ nào làm đầu vào cho giao diện web bằng Python 2.6. – l0b0