Biên mã kí tự
Lịch sử

Lịch sử của mã kí tự gắn liền với nhu cầu ngày càng tăng của thông tin biểu tượng dựa trên kí tự qua trung gian là máy tính ở khoảng cách xa, sử dụng các phương tiện điện tử từng được coi là mới mẻ. Các loại mã sớm nhất được dựa trên các hệ thống chuyển vị (cyphering) và biên mã thủ công được viết tay, chẳng hạn như chuyển vị Bacon, Braille và bảng mã kí tự tiếng Trung bốn chữ số được dùng cho Trung văn điện mã (Hans Schjellerup, 1869). Với việc áp dụng các kĩ thuật điện-cơ và điện tử, những loại mã sớm nhất này đã được điều chỉnh cho phù hợp với những khả năng và hạn chế của các cỗ máy thời kì đầu. Loại mã kí tự được truyền bằng điện được biết đến sớm nhất, mã Morse, được giới thiệu vào những năm 1840, sử dụng một hệ thống bốn "biểu tượng" (tín hiệu ngắn, tín hiệu dài, khoảng trắng ngắn và khoảng trắng dài) để sinh mã với độ dài biến thiên. Dù nhiều lần được sử dụng vào mục đích thương mại bằng máy móc, mã Morse thường được dùng như một loại mã thủ công, được viết bằng tay thông qua một phím điện báo, có thể được giải mã bằng tai và vẫn còn được dùng trong phát thanh nghiệp dư và hàng không. Phần lớn các loại mã có độ dài mỗi kí tự cố định hoặc là chuỗi có độ dài biến thiên của các mã có độ dài cố định (v.d.Unicode).
Một số ví dụ về các hệ biên mã kí tự phổ biến là mã Morse, mã Baudot, Mã chuẩn Hoa Kỳ dùng cho Trao đổi Thông tin (ASCII) và Unicode. Unicode, một hệ biên mã được xác định rõ ràng và dễ mở rộng, đã thế chỗ hầu hết biên mã kí tự sớm hơn nó.
Mã Baudot, một biên mã năm bit, được Émile Baudot tạo ra vào năm 1870, được cấp bằng sáng chế năm 1874, được Donald Murray chỉnh sửa năm 1901, và được CCITT tiêu chuẩn hoá thành Bảng chữ cái Điện báo Quốc tế Số 2 (International Telegraph Alphabet No. 2 hay ITA2) vào năm 1930. Cái tên "baudot" đã bị áp dụng một cách sai lầm vào ITA2 và nhiều biến thể khác. ITA2 đã tồn tại nhiều thiếu sót và thường được "cải tiến" bởi nhiều nhà sản xuất thiết bị, đôi khi gây ra vấn đề về tương thích. Năm 1959, quân đội Mĩ đã định nghĩa ra mã Fieldata, một loại mã sáu hoặc bảy bit, được Quân đoàn Truyền tin Hoa Kỳ giới thiệu. Dù Fieldata đã đề cập đến nhiều vấn đề của thời đó (v.d. chữ và số được sắp xếp để máy đối chiếu), Fieldata đã không đạt được mục tiêu của mình và không tồn tại được lâu. Vào năm 1963, mã ASCII (American Standard Code for Information Interchange; Mã chuẩn Hoa Kỳ dùng cho Trao đổi Thông tin) lần đầu tiên được ra mắt (X3.4-1963) bởi hội đồng ASCII (gồm ít nhất một thành viên của hội đồng Fieldata, W. F. Leubbert), giải quyết được phần lớn những khuyết điểm của Fieldata, bằng cách sử dụng một dạng mã ngắn gọn hơn. Nhiều sự thay đổi là khó thấy, chẳng hạn như tập kí tự sắp xếp được trong những khoảng số nhất định. ASCII63 đã trở nên thành công, được chấp nhận rộng rãi trong công nghiệp, và với những bản phát hành tiếp đó của mã ASCII 1967 (bổ sung thêm chữ in thường và sửa một số vấn đề về "mã điều khiển") ASCII67 đã được chấp nhận một cách tương đối rộng rãi. Bản chất hướng-Mĩ của ASCII67 đã phần nào được giải quyết trong chuẩn ECMA-6 Châu Âu.
Herman Hollerith đã phát minh ra biên mã dữ liệu bằng thẻ đục lỗ vào cuối thế kỉ 19 để phân tích dữ liệu điều tra dân số. Ban đầu, mỗi vị trí của lỗ đại diện cho một phần tử dữ liệu khác nhau, nhưng về sau, thông tin dạng số được biên mã bằng cách đánh số những hàng bên dưới từ 0 đến 9, với mỗi chỗ đục trong một cột đại diện cho số hàng của nó. Dữ liệu chữ cái về sau được biên mã bằng cách cho phép đục nhiều hơn một lỗ mỗi cột. Các máy lập bảng (tabulating machine) điện cơ biểu diễn ngày tháng bên trong máy bằng thời gian của các xung nhịp so với chuyển động của thẻ chạy trong máy. Khi IBM chuyển sang xử lí điện tử, bắt đầu từ mẫu sản phẩm IBM 603 Electronic Multiplier, nó đã sử dụng nhiều loại biên mã nhị phân khác nhau gắn với mã thẻ đục lỗ.
Số thập phân được mã hoá nhị phân của IBM (Binary Coded Decimal, viết tắt là BCD) là một sơ đồ biên mã sáu bit đã được IBM sử dụng từ những năm 1953 trong các mẫu máy tính 702 và 704 của công ty, và trong các dòng máy 7000 Series và 1400 series về sau, cũng như trong các thiết bị ngoại vi liên quan. Vì mã thẻ đục lỗ thời đó chỉ sử dụng các chữ số được cho phép, các chữ cái tiếng Anh viết hoa và một và kí tự đặc biệt, 6 bit là đủ dùng. BCD đã mở rộng biên mã dạng số bốn bit đơn giản hiện có để bao gồm bảng chữ cái và các kí tự đặc biệt, dễ dàng ánh xạ nó với biên mã thẻ đục lỗ vốn đang được sử dụng rộng rãi. Mã của IBM được dùng chủ yếu với các thiết bị của IBM; các nhà cung cấp máy tính cùng thời có các loại mã kí tự riêng, thường là sáu bit, nhưng thường có khả năng đọc được các loại băng do thiết bị của IBM tạo ra. BCD là tiền thân của EBCDIC (Extended Binary Coded Decimal Interchange Code; Mã Trao đổi Thập phân Được mã hoá Nhị phân Mở rộng), một sơ đồ biên mã tám bit được phát triển vào năm 1963 cho máy IBM System/360 với một tập kí tự lớn hơn, bao gồm cả các chữ cái in thường.
Các giới hạn của những tập kí tự này sớm trở nên rõ ràng, và một số phương pháp dành riêng cho vấn đề này đã được phát triển để mở rộng chúng. Nhu cầu hỗ trợ thêm các hệ chữ viết của các ngôn ngữ khác nhau, bao gồm họ chữ CJK trong các chữ viết Đông Á, đặt ra yêu cầu hỗ trợ một lượng kí tự lớn hơn nhiều và một cách tiếp cận có hệ thống về biên mã kí tự thay cho các cách tiếp cận đặc biệt trước đây.[cần dẫn nguồn]
Trong quá trình phát triển các biên mã kí tự chung có thể hoán đổi được cho nhau, các nhà nghiên cứu vào những năm 1980 đã gặp phải tình thế tiến thoái lưỡng nan rằng, một mặt, dường như cần phải thêm nhiều bit hơn để có thể chứa được các kí tự bổ sung; nhưng mặt khác, đối với những người dùng một tập kí tự tương đối nhỏ trong bảng chữ cái La-tinh (chiếm phần lớn số người dùng máy tính) thì những bit bổ sung đó lại là một sự lãng phí rất lớn tài nguyên máy tính vốn đã đắt đỏ và khan hiếm vào thời điểm đó (vì chúng sẽ luôn bị bỏ đi đối với những người dùng này). Vào năm 1985, ổ cứng của một máy tính tầm trung chỉ có thể lưu trữ khoảng 10 megabyte, và có giá khoảng 250 USD trên thị trường bán sỉ (và thường cao hơn nhiều nếu được mua riêng tại cửa hàng bán lẻ), vậy nên vào thời đó mỗi bit đều được tận dụng triệt để.
Giải pháp thoả hiệp cuối cùng cũng được tìm ra và phát triển vào Unicode, đó là bỏ đi giả định (có từ thời mã điện báo) rằng một kí tự chỉ luôn tương ứng trực tiếp với một chuỗi bit cụ thể. Thay vào đó, các kí tự đầu tiên sẽ được ánh xạ vào một kiểu biểu diễn trung gian dùng chung dưới dùng các con số trừu tượng được gọi là điểm mã. Các điểm mã sau đó sẽ được biểu diễn theo nhiều cách và với những số bit mỗi kí tự mặc định khác nhau (đơn vị mã) phụ thuộc vào ngữ cảnh. Để biên mã các điểm mã cao hơn chiều dài của đơn vị mã , chẳng hạn từ 256 trở lên đối với đơn vị 8 bit, giải pháp là triển khai biên mã với chiều rộng biến thiên (variable-width encoding), nơi mà một chuỗi thoát sẽ báo hiệu ràng các bit theo sau nên được phân tích thành một điểm mã cao hơn.