Ký tự điều khiển
Các ký tự đặc biệt không hiển thị trên màn hình nhưng chỉ thị cách xử lý văn bản. Bao gồm ký tự xuống dòng (LF), tab (HT), ký tự về đầu dòng (CR) và ký tự null (NUL).
Ký tự điều khiển (control character) là những ký tự đặc biệt không được hiển thị dưới dạng chữ mà dùng để điều khiển cách xử lý và trình bày văn bản. 32 ký tự đầu tiên của bảng ASCII (U+0000 đến U+001F) cùng với DEL (U+007F) được phân loại là ký tự điều khiển. Unicode còn định nghĩa thêm các ký tự điều khiển trong phạm vi U+0080 đến U+009F.
Chỉ một số ít ký tự điều khiển được sử dụng thường xuyên. LF (Line Feed, U+000A) biểu thị xuống dòng và là mã xuống dòng chuẩn trên các hệ điều hành UNIX/Linux. CR (Carriage Return, U+000D) đưa con trỏ về đầu dòng; Windows sử dụng tổ hợp CR+LF (2 ký tự) để biểu thị xuống dòng. HT (Horizontal Tab, U+0009) là ký tự tab dùng để căn chỉnh cột. NUL (U+0000) là ký tự null, đánh dấu kết thúc chuỗi trong ngôn ngữ C.
Trong việc đếm ký tự, cách xử lý ký tự điều khiển thường gây nhầm lẫn. Khi bạn nhấn Enter trong trình soạn thảo, về mặt hiển thị chỉ thấy dòng mới, nhưng bên trong đã chèn LF (1 byte) hoặc CR+LF (2 byte). Tệp văn bản tạo trên Windows sẽ có số ký tự nhiều hơn 1 ký tự cho mỗi lần xuống dòng so với cùng nội dung tạo trên Linux. Đây là vấn đề thường gặp khi lập trình viên Việt Nam làm việc trên nhiều hệ điều hành khác nhau.
Trong ngữ cảnh web, HTML nén các ký tự khoảng trắng liên tiếp (dấu cách, tab, xuống dòng) thành một dấu cách duy nhất khi hiển thị. Do đó, số ký tự trong mã nguồn HTML và số ký tự hiển thị trên trình duyệt không khớp nhau. Sử dụng thẻ <pre> hoặc CSS white-space: pre sẽ giữ nguyên khoảng trắng bao gồm cả ký tự điều khiển.
Về bảo mật, ký tự điều khiển có thể bị lợi dụng cho các cuộc tấn công injection. "HTTP Header Injection" chèn CR+LF vào header HTTP, còn "Log Injection" chèn ký tự xuống dòng để tạo các mục log giả. Việc loại bỏ ký tự điều khiển khỏi dữ liệu đầu vào của người dùng (sanitize) là biện pháp bảo mật cơ bản. Với các ứng dụng web tiếng Việt, cần đặc biệt chú ý vì dữ liệu nhập từ bộ gõ tiếng Việt đôi khi chứa các ký tự điều khiển không mong muốn.
Unicode còn có danh mục "ký tự định dạng" (format character) bên cạnh ký tự điều khiển. Khoảng trắng độ rộng không (U+200B), ký tự nối độ rộng không (U+200D), ký tự điều khiển hai chiều (U+200E, U+200F) thuộc nhóm này. Chúng cũng vô hình như ký tự điều khiển nhưng ảnh hưởng đến cách hiển thị văn bản, nên cần xác định rõ cách xử lý khi đếm ký tự.