Chuyển đổi chữ hoa/thường
Quá trình chuyển đổi qua lại giữa chữ hoa (uppercase) và chữ thường (lowercase) của bảng chữ cái. Quy tắc chuyển đổi khác nhau tùy theo ngôn ngữ, và trong một số trường hợp số lượng ký tự có thể thay đổi.
Chuyển đổi chữ hoa/thường (case conversion) là một trong những thao tác xử lý văn bản phổ biến nhất. Trong tiếng Anh, "A" chuyển thành "a" (viết thường) hay "hello" thành "HELLO" (viết hoa) với 26 chữ cái tương ứng 1-1. Tuy nhiên, khi nhìn rộng ra các ngôn ngữ trên thế giới, việc chuyển đổi chữ hoa/thường phức tạp hơn nhiều so với tưởng tượng.
Tiếng Việt sử dụng bảng chữ cái Latin mở rộng với các dấu thanh, tạo ra thách thức riêng cho việc chuyển đổi. Ví dụ, "ắ" viết hoa thành "Ắ" - cả dấu mũ và dấu thanh đều phải được xử lý đúng. Trong mã hóa Unicode, ký tự có dấu tiếng Việt có thể được biểu diễn dưới dạng tổ hợp (composed) hoặc phân tách (decomposed), và việc chuyển đổi chữ hoa/thường phải hoạt động chính xác với cả hai dạng. Bảng mã TCVN 5712 cũ không hỗ trợ tốt việc này, đây là một lý do quan trọng để chuyển sang Unicode.
Ví dụ nổi tiếng nhất về sự phức tạp là chữ Eszett "ß" trong tiếng Đức. Khi viết hoa "ß" sẽ thành "SS" (2 ký tự), nghĩa là số ký tự tăng lên sau khi chuyển đổi. Tiếng Thổ Nhĩ Kỳ có quy tắc riêng: chữ hoa của "i" là "İ" (có dấu chấm), và chữ thường của "I" là "ı" (không có dấu chấm), khác hoàn toàn với tiếng Anh.
Trong lập trình, so sánh không phân biệt chữ hoa/thường (case-insensitive comparison) thường xuyên cần thiết. Phần local của địa chỉ email phân biệt chữ hoa/thường nhưng phần tên miền thì không. Scheme của URL (http/HTTP) và hostname không phân biệt, nhưng phần path thì có. Cần xác định rõ phần nào áp dụng so sánh case-insensitive để xử lý chính xác.
JavaScript cung cấp toLowerCase() và toUpperCase() hỗ trợ Unicode, nhưng để chuyển đổi phụ thuộc locale cần dùng toLocaleLowerCase(). Với tiếng Việt, 'I'.toLocaleLowerCase('vi') trả về "i" giống tiếng Anh, nhưng với tiếng Thổ Nhĩ Kỳ 'I'.toLocaleLowerCase('tr') trả về "ı". Bỏ qua locale khi chuyển đổi là nguồn gốc phổ biến của lỗi quốc tế hóa.
Về đếm ký tự, cần chú ý các trường hợp số ký tự thay đổi sau chuyển đổi. Ngoài ví dụ "ß" thành "SS" đã nêu, tiếng Hy Lạp có "ς" (sigma cuối từ) chuyển thành "Σ" rồi thành "σ" (sigma giữa từ), hình dạng chữ thường thay đổi theo vị trí. Khi chuyển đổi chữ hoa trong các trường có giới hạn ký tự, cần tính đến khả năng số ký tự vượt quá giới hạn sau chuyển đổi. Các quy ước đặt tên trong lập trình như camelCase, PascalCase, snake_case, kebab-case cũng đòi hỏi nhận diện ranh giới từ trước khi chuyển đổi.