Diacritical Mark
Ký hiệu phụ được thêm phía trên hoặc phía dưới ký tự. Chỉ thị sự khác biệt phát âm như dấu trọng âm và dấu umlaut.
Dấu phụ là ký hiệu phụ được thêm phía trên, phía dưới hoặc bên cạnh ký tự. Các ví dụ phổ biến bao gồm dấu trọng âm tiếng Pháp (é, è, ê), dấu umlaut tiếng Đức (ä, ö, ü), dấu ngã tiếng Tây Ban Nha (ñ) và dấu háček tiếng Séc (č, š, ž). Được sử dụng trong các ngôn ngữ trên toàn thế giới, đặc biệt là các ngôn ngữ dựa trên chữ Latin, các dấu này không chỉ là trang trí mà là yếu tố thiết yếu để phân biệt phát âm và ý nghĩa. Trong tiếng Pháp, ví dụ, ou (hoặc) và où (ở đâu) khác nhau về ý nghĩa chỉ bởi sự có mặt của dấu.
Trong thực tế, biểu diễn kép này gây ra các vấn đề nghiêm trọng với so sánh và sắp xếp chuỗi. Mặc dù hai phiên bản "é" trông giống nhau, chuỗi byte của chúng khác nhau giữa NFC và NFD, vì vậy so sánh byte đơn giản thất bại. Chuẩn hóa Unicode phải được áp dụng để thống nhất biểu diễn trong các tình huống yêu cầu kiểm tra đồng nhất chuỗi, như tìm kiếm cơ sở dữ liệu, khớp tên tệp và xác minh mật khẩu. Hệ thống tệp macOS (APFS) có xu hướng sử dụng NFD, trong khi Windows (NTFS) sử dụng NFC, khiến chuẩn hóa tên tệp đặc biệt quan trọng trong phát triển đa nền tảng.
Một hiểu lầm phổ biến là gọi tất cả dấu phụ đơn giản là "dấu trọng âm". Dấu trọng âm chỉ là một loại dấu phụ; danh mục rộng hơn còn bao gồm dấu cedilla (ç), dấu ogonek (ą), dấu macron (ā) và nhiều hơn nữa. Thú vị là, dakuten tiếng Nhật (゛) và handakuten (゜) cũng được coi là ký tự kết hợp trong Unicode, khiến chúng là họ hàng xa của dấu phụ theo nghĩa rộng.
Trong lập trình, chuẩn hóa được thực hiện bằng phương thức String.prototype.normalize() của JavaScript hoặc hàm unicodedata.normalize() của Python. Khi nhận đầu vào biểu mẫu trong ứng dụng web, áp dụng chuẩn hóa NFC phía máy chủ trước khi lưu dữ liệu vào cơ sở dữ liệu là thực hành tiêu chuẩn.
Từ góc độ đếm ký tự, văn bản dạng NFD đếm ký tự cơ sở và ký tự kết hợp là code point riêng biệt, dẫn đến số đếm cao hơn ký tự hiển thị. Ví dụ, "café" là 4 ký tự trong NFC nhưng 5 ký tự trong NFD (c, a, f, e, ́). Để có "số ký tự hiển thị" chính xác, phải đếm theo đơn vị cụm grapheme, khiến việc xử lý dấu phụ là thách thức không thể tránh khỏi trong triển khai công cụ đếm ký tự.