Để nhận diện các thứ khác nhau trên Internet, cần so sánh các định danh (identification) cho bằng nhau. Quy trình so sánh phụ thuộc vào miền ứng dụng. Ví dụ, một số thứ không phân biệt chữ hoa/thường (case-insensitive). Để kiểm tra loại thông tin này, dùng stringprep.
RFC 3454 định nghĩa quy trình chuẩn bị chuỗi Unicode trước khi truyền qua dây truyền. Sau khi qua quy trình chuẩn bị, chúng có dạng chuẩn hóa (normalized form) nhất định.
RFC định nghĩa một tập bảng (tables); các bảng này có thể kết hợp thành hồ sơ (profiles). Ví dụ, một profile của stringprep là nameprep. Trong nameprep, có tên miền quốc tế hóa (internationalized domain names).
Có hai loại bảng: set (tập hợp) và mappings (ánh xạ). Nếu một ký tự có trong bảng set, trả về true, ngược lại false. Với bảng mapping, khi truyền key, trả về giá trị liên kết.
Để dùng module này, cần nhập module stringprep:
import stringprep
Các bảng của stringprep:
| STT | Bảng & Mô tả |
|---|---|
| 1 | stringprep.in_table_a1(code) – Code point không dấu trong Unicode 3.2 |
| 2 | stringprep.in_table_b1(code) – Thường được ánh xạ thành rỗng |
| 3 | stringprep.in_table_b2(code) – Trả về giá trị ánh xạ cho code tới bảng B.2. Ánh xạ cho NFKC case-folding |
| 4 | stringprep.in_table_b3(code) – Ánh xạ case-folding không chuẩn hóa |
| 5 | stringprep.in_table_c11(code) – Ký tự khoảng trắng ASCII |
| 6 | stringprep.in_table_c12(code) – Ký tự khoảng trắng non-ASCII |
| 7 | stringprep.in_table_c11_c12(code) – Kết hợp ASCII và non-ASCII space |
| 8 | stringprep.in_table_c21(code) – Ký tự điều khiển ASCII |
| 9 | stringprep.in_table_c22(code) – Ký tự điều khiển non-ASCII |
| 10 | stringprep.in_table_c21_c22(code) – Kết hợp ASCII và non-ASCII control |
| 11 | stringprep.in_table_c3(code) – Ký tự dùng riêng (private use) |
| 12 | stringprep.in_table_c4(code) – Code point non-character |
| 13 | stringprep.in_table_c5(code) – Surrogate Codes |
| 14 | stringprep.in_table_c6(code) – Không phù hợp cho ký tự plain text |
| 15 | stringprep.in_table_c7(code) – Không phù hợp cho biểu diễn chuẩn tắc |
| 16 | stringprep.in_table_c8(code) – Code thay đổi thuộc tính hiển thị |
| 17 | stringprep.in_table_c9(code) – Ký tự gắn thẻ (tagging) |
| 18 | stringprep.in_table_d1(code) – Ký tự có thuộc tính bidirectional 'R' và 'AL' |
| 19 | stringprep.in_table_d2(code) – Ký tự có thuộc tính bidirectional 'L' |
Mã ví dụ
import stringprep as sp
print('\u0020') # Ký tự space
print(sp.in_table_c11('\u0020')) # Nằm trong ASCII space
print(sp.in_table_d2('L')) # Chữ L có bidirectional property left-to-right
print(sp.in_table_d1('L')) # Chữ L KHÔNG có bidirectional property right-to-left
Kết quả
True True False