Unicode ไม่ได้ถูกออกแบบมาเพื่อแก้ไขปัญหาทั้งหมดของการเข้ารหัสที่แตกต่างกันมากมาย
Unicode ได้รับการออกแบบมาเพื่อแก้ไขปัญหาทั้งหมดของหนึ่งหมายเลขที่แสดงสิ่งต่าง ๆ มากมายขึ้นอยู่กับหน้ารหัสที่ใช้งานอยู่ ตัวเลข 0 - 127 แสดงถึงอักขระเดียวกันในหน้ารหัส Ansi ใด ๆ นี่คือสิ่งที่เรียกว่าแผนภูมิ ASCII หรือชุดอักขระ ในหน้ารหัส Ansi ซึ่งอนุญาตให้มีได้ 256 ตัวอักษรตัวเลข 128 - 255 หมายถึงอักขระที่แตกต่างกันในหน้ารหัสที่แตกต่างกัน
ตัวอย่างเช่น
- ตัวเลข $ 57 แสดงถึงตัวอักษรตัวใหญ่ W ในทุกหน้ารหัส แต่
- หมายเลข $ EC แสดงสัญลักษณ์ความไม่แน่นอนในหน้ารหัส 437 (สหรัฐอเมริกา) แต่เป็น "LATIN SMALL LETTER N WITH CEDILLA" ในรหัสหน้า 775 (บอลติก)
- เซ็นเซ็นต์คือหมายเลข $ 9B ในรหัสหน้า 437 แต่หมายเลข 96 ในรหัสหน้า 775
สิ่งที่ยูนิโคดทำคือทำให้ทุกอย่างกลับหัวกลับหาง ใน Unicode ไม่มี "การใช้ซ้ำ" แต่ละหมายเลขแสดงถึงอักขระที่ไม่ซ้ำกันเดียว หมายเลข $ 00A2 ใน Unicode คือเครื่องหมายเซ็นต์และเซ็นเซ็นจะปรากฏขึ้นที่อื่นในนิยาม Unicode
ทำไมจึงมีการเข้ารหัส Unicode จำนวนมาก แม้แต่รุ่นเดียวกัน (เป็นหลัก) หลายรุ่นเช่น UTF-8, UTF-16 เป็นต้น
ไม่มีการเข้ารหัสเดียวกันหลายรุ่น มีการเข้ารหัสที่หลากหลายของแผนที่นิยามอักขระ Unicode เดียวกันและสิ่งเหล่านี้ได้รับการ "ประดิษฐ์" เพื่อจัดการกับข้อกำหนดการจัดเก็บสำหรับการใช้งานที่แตกต่างกันของเครื่องบินภาษาต่างๆที่มีอยู่ใน Unicode
Unicode กำหนด (หรือมีพื้นที่ในการกำหนด) 4.294.967.295 อักขระที่ไม่ซ้ำกัน ถ้าคุณต้องการแมปเหล่านี้กับที่เก็บข้อมูลดิสก์ / หน่วยความจำโดยไม่ต้องแปลงอัลกอริทึมใด ๆ คุณต้องมี 4 ไบต์ต่ออักขระ หากคุณต้องการจัดเก็บข้อความที่มีตัวอักษรจากระนาบภาษาทั้งหมดดังนั้น UTF-32 (ซึ่งโดยทั่วไปจะเป็นอักขระ 1 ตัวตรง - การเข้ารหัสหน่วยเก็บข้อมูลขนาด 4 ไบต์ของข้อกำหนด Unicode) อาจเป็นสิ่งที่คุณต้องการ
แต่ข้อความแทบจะไม่ได้ใช้ตัวละครจากเครื่องบินทุกภาษา จากนั้นใช้อักขระ 4 ไบต์ต่อตัวละครดูเหมือนจะเป็นการสิ้นเปลืองขนาดใหญ่ โดยเฉพาะอย่างยิ่งเมื่อคุณคำนึงถึงว่าภาษาส่วนใหญ่ในโลกถูกกำหนดภายในสิ่งที่เรียกว่า Basic Multi-lingual Plane (BMP): หมายเลข 65536 แรกของนิยาม Unicode
และนั่นคือที่มาของ UTF-16 หากคุณใช้ตัวอักษรจาก BMP เพียงอย่างเดียว UTF-16 จะเก็บที่มีประสิทธิภาพมากโดยใช้เพียงสองไบต์ต่อตัวอักษร จะใช้ไบต์เพิ่มเติมสำหรับอักขระนอก BMP เท่านั้น ความแตกต่างระหว่าง UTF-16LE (ลิตเติ้ล Endian) และ UTF-16BE (บิ๊ก Endian) จริงๆเพียง แต่มีบางสิ่งบางอย่างจะทำอย่างไรกับตัวเลขจะแสดงภายในหน่วยความจำคอมพิวเตอร์ (รูปแบบไบต์A0
หมายฐานสิบหก $ A0 หรือหมายถึง $ 0A)
หากข้อความของคุณใช้อักขระที่แตกต่างกันน้อยลงเช่นข้อความส่วนใหญ่ในภาษายุโรปตะวันตกคุณจะต้อง จำกัด ข้อกำหนดการจัดเก็บสำหรับข้อความของคุณให้มากขึ้น ดังนั้น UTF-8 ซึ่งใช้ไบต์เดียวเพื่อเก็บอักขระที่มีอยู่ในแผนภูมิ ASCII (ตัวเลข 128 ตัวแรก) และการเลือกจากอักขระ Ansi (ตัวเลข 128 สองหน้าของหน้ารหัสต่าง ๆ ) จะใช้ไบต์เพิ่มเติมสำหรับอักขระที่อยู่นอกชุด "ตัวอักษรที่ใช้มากที่สุด" นี้
ดังนั้นเพื่อสรุป:
- Unicode เป็นการแมปของตัวละครในทุกภาษาบนโลก (และ Klingon บางอันเพื่อบู๊ต) และจากนั้นบางส่วน (คณิตศาสตร์, ดนตรี, และอื่น ๆ ) ไปยังหมายเลขที่ไม่ซ้ำกัน
- การเข้ารหัสเป็นอัลกอริทึมที่กำหนดไว้เพื่อจัดเก็บข้อความโดยใช้ตัวเลขของแผนที่อักขระที่ไม่ซ้ำกันนี้เป็นช่องว่างที่มีประสิทธิภาพที่สุดเท่าที่จะเป็นไปได้เนื่องจาก "การใช้งานเฉลี่ย" ของตัวละครภายในข้อความ