โดยทั่วไปการเข้ารหัสอักขระใหม่จะกระทำเมื่อระบบรับไม่สามารถประมวลผลได้ ตัวอย่างเช่น BASE64 แสดงข้อมูลโดยใช้ 6 บิต (2 6ดังนั้น 64) ของอักขระเพื่อแสดงลำดับข้อมูลที่ยาวขึ้น (บางครั้งที่ปรากฏ "==" ในตอนท้ายคือการเติมสำหรับการจัดตำแหน่ง) นี่เป็นเพราะไฟล์รูปภาพของคุณในอีเมลอาจมี 0xFE อยู่และเซิร์ฟเวอร์อีเมลของคุณจะไม่มีความสุขในการส่งสัญญาณนั้น (หรืออักขระอื่น ๆ ที่ไม่ใช่การพิมพ์แบบดั้งเดิม)
ไม่มีการเข้ารหัสที่ "ลดขนาด" การเข้ารหัสเป็นเพียงการแม็พของบิตกับอักขระที่แสดง ASCII เป็นชุดอักขระ 7 บิต (การเข้ารหัส) ที่มักถูกเก็บไว้ในพื้นที่ 8 บิต หากคุณ จำกัด ช่วงที่คุณยอมรับคุณสามารถกำจัดอักขระควบคุมได้เช่นกัน
การใช้วิธีการนี้หมายความว่าคุณต้องเขียนสิ่งต่าง ๆ ในระดับบิตและมันก็เล่นได้อย่างไม่น่าเชื่อด้วยความเร็วและคำแนะนำของเครื่องจักร ตัวอย่างเช่นนั้นคือสาเหตุที่ Unicode คือ UTF-8, UTF-16 และ UTF-32
หากคุณกำลังทำสิ่งนี้เพื่อความปลอดภัย (นั่นเป็นเหตุผลที่คุณโพสต์ไว้ใน Security.SE ใช่มั้ย) เพียงแค่กรองสิ่งต่าง ๆ และเก็บไว้ตามปกติ หากคุณกำลังทำสิ่งนี้เพื่อประหยัดพื้นที่พิจารณาว่ารหัสพิเศษทั้งหมดและเวลาเข้าถึงที่ช้าลง (เพราะรายการส่วนใหญ่จะข้ามขอบเขตที่อยู่) คุ้มค่ากับการประหยัดพื้นที่
โดยโดยต่อไปนี้เป็นตัวอย่างจากหลักสูตร CS ที่เราต้องแปลง ASCII จากที่เก็บข้อมูล 8 บิตเป็น 7 บิต:
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