Combining Character
Ký tự Unicode kết hợp với ký tự cơ sở trước đó để hiển thị. Bao gồm dấu phụ và dakuten.
Ký tự kết hợp là ký tự Unicode không hiển thị độc lập mà kết hợp với ký tự cơ sở trước đó để tạo thành một ký tự hiển thị duy nhất. Dấu phụ kết hợp (U+0300 đến U+036F) là ví dụ phổ biến nhất, bao gồm dấu trọng âm, dấu umlaut và dấu cedilla.
Ví dụ, chữ Latin "a" (U+0061) theo sau bởi dấu sắc kết hợp (U+0301) hiển thị là "á". Trong tiếng Nhật, dakuten kết hợp (U+3099) và handakuten kết hợp (U+309A) là ví dụ, trong đó "か" + U+3099 tạo ra "が". Các ngôn ngữ như tiếng Thái và tiếng Ả Rập cũng sử dụng nhiều ký tự kết hợp, và Unicode định nghĩa hơn 800 loại. Hướng dẫn lập trình Unicode bao gồm chủ đề này chi tiết.
Do ký tự kết hợp, các ký tự trông giống nhau có thể có chuỗi code point khác nhau. "á" có thể được biểu diễn dưới dạng ký tự tổ hợp sẵn U+00E1 (dạng NFC) hoặc ký tự cơ sở U+0061 + ký tự kết hợp U+0301 (dạng NFD). Chuẩn hóa Unicode (NFC cho tổ hợp, NFD cho phân tách) cần thiết để xử lý nhất quán. Nếu không chuẩn hóa trước khi so sánh chuỗi, các chuỗi trông giống nhau có thể bị đánh giá là "không bằng nhau".
Nhiều ký tự kết hợp có thể được xếp chồng trên một ký tự cơ sở duy nhất, cho phép các sửa đổi phức tạp như dấu trọng âm phía trên và dấu cedilla phía dưới. Trong trường hợp cực đoan, hàng chục ký tự kết hợp trên một ký tự cơ sở tạo ra "văn bản Zalgo", đôi khi được sử dụng cho kiểm tra stress hiển thị.
Từ góc độ bảo mật, ký tự kết hợp có thể bị khai thác cho giả mạo trực quan (chuỗi trông giống nhau nhưng có chuỗi code point khác nhau). Chuẩn hóa trước khi so sánh là thiết yếu khi xác thực tên người dùng và tên miền.
Đối với đếm ký tự, ký tự kết hợp được đếm là code point riêng biệt, vì vậy String.length không khớp với số ký tự hiển thị. "á" ở dạng NFD có số code point là 2 nhưng hiển thị là 1 ký tự. Đếm theo cụm grapheme trả về kết quả gần nhất với kỳ vọng của người dùng. Sách thuật toán xử lý văn bản cung cấp thêm ngữ cảnh.