Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chuẩn bị chuỗi Internet (Internet String Preparation) trong Python

Để 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:

STTBảng & Mô tả
1stringprep.in_table_a1(code) – Code point không dấu trong Unicode 3.2
2stringprep.in_table_b1(code) – Thường được ánh xạ thành rỗng
3stringprep.in_table_b2(code) – Trả về giá trị ánh xạ cho code tới bảng B.2. Ánh xạ cho NFKC case-folding
4stringprep.in_table_b3(code) – Ánh xạ case-folding không chuẩn hóa
5stringprep.in_table_c11(code) – Ký tự khoảng trắng ASCII
6stringprep.in_table_c12(code) – Ký tự khoảng trắng non-ASCII
7stringprep.in_table_c11_c12(code) – Kết hợp ASCII và non-ASCII space
8stringprep.in_table_c21(code) – Ký tự điều khiển ASCII
9stringprep.in_table_c22(code) – Ký tự điều khiển non-ASCII
10stringprep.in_table_c21_c22(code) – Kết hợp ASCII và non-ASCII control
11stringprep.in_table_c3(code) – Ký tự dùng riêng (private use)
12stringprep.in_table_c4(code) – Code point non-character
13stringprep.in_table_c5(code) – Surrogate Codes
14stringprep.in_table_c6(code) – Không phù hợp cho ký tự plain text
15stringprep.in_table_c7(code) – Không phù hợp cho biểu diễn chuẩn tắc
16stringprep.in_table_c8(code) – Code thay đổi thuộc tính hiển thị
17stringprep.in_table_c9(code) – Ký tự gắn thẻ (tagging)
18stringprep.in_table_d1(code) – Ký tự có thuộc tính bidirectional 'R' và 'AL'
19stringprep.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