Ký tự mã hóa lại thường được thực hiện khi hệ thống nhận không thể xử lý chúng. Ví dụ, BASE64 đại diện cho dữ liệu bằng cách sử dụng 6 bit (2 6 , do đó 64) ký tự để biểu thị các chuỗi dữ liệu dài hơn (đôi khi "==" xuất hiện ở cuối là phần đệm để căn chỉnh). Điều này là do tệp hình ảnh của bạn trong email có thể có 0xFE trong đó và máy chủ thư của bạn sẽ không hài lòng khi truyền nó (hoặc bất kỳ ký tự không in truyền thống nào khác).
Không có mã hóa "giảm kích thước." Mã hóa chỉ là ánh xạ của các bit đến ký tự mà chúng đại diện. Điều đó nói rằng, ASCII là một bộ ký tự 7 (mã hóa) thường được lưu trữ trong 8 bit không gian. Nếu bạn giới hạn phạm vi mà bạn chấp nhận, bạn cũng có thể loại bỏ các ký tự điều khiển.
Sử dụng phương pháp này có nghĩa là bạn phải viết ra mọi thứ ở cấp độ bit, và nó cũng đóng một chút địa ngục với tốc độ và hướng dẫn của máy vì tất cả các máy hiện đại đều có sự sắp xếp là bội số của 8 bit. Ví dụ, đó là lý do tại sao Unicode là UTF-8, UTF-16 và UTF-32.
Nếu bạn đang làm điều này để bảo mật (đó là lý do tại sao bạn đăng nó trên Security.SE, phải không?), Chỉ cần lọc mọi thứ và lưu trữ chúng bình thường. Nếu bạn đang làm điều này để tiết kiệm dung lượng, hãy xem xét liệu tất cả các mã bổ sung và thời gian truy cập chậm hơn (vì hầu hết các mục nhập sẽ vượt qua ranh giới địa chỉ) có đáng để tiết kiệm không gian hay không.
Nhân tiện, sau đây là đoạn trích từ khóa học CS nơi chúng tôi phải chuyển đổi ASCII từ bộ lưu trữ 8 bit thành 7 bit:
memset(dest,0x00,8);
memcpy(dest, source, length);
for (int i = 0; i < 8; i++) {
if (dest[i] & 0x80) {
fprintf(stderr, "%s: %s\n", dest, "Illegal byte sequence");
exit(EILSEQ);
}
}
dest[0] = 0x7F & dest[0] | 0x80 & dest[1] << 7;
dest[1] = 0x3F & dest[1] >> 1 | 0xC0 & dest[2] << 6;
dest[2] = 0x1F & dest[2] >> 2 | 0xE0 & dest[3] << 5;
dest[3] = 0x0F & dest[3] >> 3 | 0xF0 & dest[4] << 4;
dest[4] = 0x07 & dest[4] >> 4 | 0xF8 & dest[5] << 3;
dest[5] = 0x03 & dest[5] >> 5 | 0xFC & dest[6] << 2;
dest[6] = 0x01 & dest[6] >> 6 | 0xFE & dest[7] << 1;
dest[7] = 0x00; //Clearing out