2013-02-04 62 views
17

Vì vậy, trên tài liệu API, http://docs.python.org/2/library/unicodedata.html#unicodedata.normalize. Nó nóiAi đó có thể giải thích cách unicodedata.normalize (form, unistr) làm việc với các ví dụ không?

Trả lại bình thường hình thức dạng cho chuỗi Unicode unistr. Các giá trị hợp lệ cho biểu mẫu là ‘NFC’, ‘NFKC’, ‘NFD’ và ‘NFKD’.`

Tài liệu này khá mơ hồ, ai đó có thể giải thích valid values bằng một số ví dụ?

Trả lời

23

Tôi tìm thấy tài liệu khá rõ ràng, nhưng đây là một vài ví dụ mã:

from unicodedata import normalize 

print '%r' % normalize('NFD', u'\u00C7') # decompose: convert Ç to "C + ̧" 
print '%r' % normalize('NFC', u'C\u0327') # compose: convert "C + ̧" to Ç 

Cả hai 'D' (= phân hủy) các hình thức chuyển đổi một ký tự đơn kết hợp (như ä) vào hai nhân vật (a + hai chấm). Cả hai hình thức 'C' (= soạn) làm ngược lại.

Hai biểu mẫu "K" được sử dụng để chuyển đổi các ký tự được thêm vào Unicode cho mục đích tương thích. Ví dụ, để hỗ trợ phần mềm không thể vẽ vòng tròn quanh các biểu tượng, có một tập hợp các "số vòng tròn", như ① (số unicode 2460). Khi chúng tôi áp dụng quá trình phân hủy kinh điển (NFD) với nó, nó không làm bất cứ điều gì:

print '%r' % normalize('NFD', u'\u2460')  # u'\u2460' 

Tuy nhiên, sự phân hủy tương thích (NFKD) sẽ trả lại "tương thích" nhân vật tương ứng:

print '%r' % normalize('NFKD', u'\u2460') # 1 

Xem http://en.wikipedia.org/wiki/Unicode_equivalence để biết thêm chi tiết.