ประวัติความเป็นมา Unicode
1.Unicode คืออะไร?
Unicode กำหนดหมายเลขเฉพาะสำหรับทุกอักขระโดยไม่สนใจว่าเป็นแพล็ตฟอร์มใด
ไม่ขึ้นกับว่าจะเป็นโปรแกรมใดและไม่ว่าจะเป็นภาษาใด
โดยพื้นฐานแล้ว คอมพิวเตอร์จะเกี่ยวข้องกับเรื่องของตัวเลข คอมพิวเตอร์จัดเก็บตัวอักษรและอักขระอื่นๆ โดยการกำหนดหมายเลขให้สำหรับแต่ละตัว ก่อนหน้าที่ Unicode จะถูกสร้างขึ้น ได้มีระบบ encoding อยู่หลายร้อยระบบสำหรับการกำหนดหมายเลขเหล่านี้ ไม่มี encoding ใดที่มีจำนวนตัวอักขระมากเพียงพอยกตัวอย่างเช่น เฉพาะในกลุ่มสหภาพยุโรปเพียงแห่งเดียว ก็ต้องการหลาย encoding ในการครอบคลุมทุกภาษาในกลุ่ม หรือแม้แต่ในภาษาเดี่ยว เช่น ภาษาอังกฤษ ก็ไม่มี encoding ใดที่เพียงพอสำหรับทุกตัวอักษร เครื่องหมายวรรคตอน และสัญลักษณ์ทางเทคนิคที่ใช้กันอยู่ทั่วไป
ระบบ encoding เหล่านี้ยังขัดแย้งซึ่งกันและกัน นั่นก็คือ ในสอง encoding สามารถใช้หมายเลขเดียวกันสำหรับตัวอักขระสองตัวที่แตกต่างกันหรือใช้หมายเลขต่างกันสำหรับอักขระตัวเดียวกัน ในระบบคอมพิวเตอร์ (โดยเฉพาะเซิร์ฟเวอร์) ต้องมีการสนับสนุนหลาย encoding และเมื่อข้อมูลที่ผ่านไปมาระหว่างการเข้ารหัสหรือแพล็ตฟอร์มที่ต่างกัน ข้อมูลนั้นจะเสี่ยงต่อการผิดพลาดเสียหาย
Unicode จะเปลี่ยนแปลงสิ่งเหล่านั้นทั้งหมด!
Unicode กำหนดหมายเลขเฉพาะสำหรับแต่ละอักขระ โดยไม่สนใจว่าเป็นแพล็ตฟอร์มใด ไม่ขึ้นกับว่าจะเป็นโปรแกรมใดและไม่ว่าจะเป็นภาษาใด มาตรฐาน Unicode ได้ถูกนำไปใช้โดยผู้นำในอุตสาหกรรม เช่น Apple, HP, IBM, JustSystem, Microsoft, Oracle, SAP, Sun, Sybase, Unisys และอื่นๆ อีกมาก Unicode เป็นสิ่งที่จำเป็นสำหรับมาตรฐานใหม่ๆ เช่น XML, Java, ECMAScript (JavaScript), LDAP, CORBA 3.0, WML ฯลฯ. และเป็นแนวทางอย่างเป็นทางการในการทำ ISO/IEC 10646 Unicode ได้รับการสนับสนุนในระบบปฏิบัติการจำนวนมาก บราวเซอร์ใหม่ๆ ทุกตัว และผลิตภัณฑ์อื่นๆ อีกมาก การเกิดขึ้นของ Unicode Standard และทูลส์ต่างๆ ที่มีในการสนับสนุน Unicode เป็นหนึ่งในแนวโน้มทางเทคโนโลยีซอฟต์แวร์ระดับโลกที่มีความสำคัญที่สุด
การรวม Unicode เข้าไปในระบบไคลเอ็นต์-เซิร์ฟเวอร์ หรือ Applications แบบ multi-tiered และเว็บไซต์ จะทำให้เกิดการประหยัดค่าใช้จ่ายมากกว่าการใช้ชุดอักขระแบบเดิม Unicode ทำให้ผลิตภัณฑ์ซอฟต์แวร์หนึ่งเดียว หรือเว็บไซต์แห่งเดียว รองรับได้หลายแพล็ตฟอร์ม หลายภาษาและหลายประเทศโดยไม่ต้องทำการรื้อปรับระบบ Unicode ยังทำให้ข้อมูลสามารถเคลื่อนย้ายไปมาในหลายๆ ระบบโดยไม่เกิดความผิดพลาดเสียหาย
ความสำเร็จของ Unicode ในเรื่องของการรวมการเข้ารหัสอักขระให้เป็นหนึ่ง เป็นที่รู้จักกว้างขวางและมีอิทธิพลต่อการทำซอฟต์แวร์ให้เป็นสากล กล่าวคือสามารถใช้ได้หลายภาษา มาตรฐานนี้มีการนำไปใช้เป็นเทคโนโลยีหลักหลายอย่าง อาทิ XML JAVA และระบบปฏิบัติการสมัยใหม่
ทำไมต้องมี Unicode
ในปัจจุบันมีตัวอักษรให้เลือกใช้อยู่หลายแบบ มี Character set อยู่มากมาย เช่น ตัวอักษรภาษาไทย, ตัวอักษรภาษาญี่ปุ่น ฯลฯ ในอดีตเวลาที่เรา Encode ภาษา ถ้าเป็น ASCII ขนาด 1 byte จะมี 8 bit ซึ่ง ASCII code ก็คือพวกที่เก็บตัวอักษรภาษาอังกฤษตัวเล็ก, ตัวใหญ่, ตัวเลข, เครื่องหมายมากกว่า, น้อยกว่า, ไม่เท่ากับ, full stop, # เป็นต้น ใช้พื้นที่แค่ 7 bit ก็สามารถ Encode ข้อมูลของได้ครบแล้ว
ส่วน bit ที่ 8 นี่ก็ใส่ 0 ลงไป แต่ในประเทศที่ไม่ได้ใช้ตัวอักษรภาษาอังกฤษในการเขียน ก็อยากจะมีรหัสในการเขียนตัวอักษรเป็นของตัวเองเหมือนกัน ดังนั้นแล้วในการแก้ปัญหา ก็คือ จะเอา bit ที่ 8 มาใช้ เช่น ตั้ง bit ที่ 8 เป็น 1 แล้วก็ Encode ข้างในด้วยรหัสของตัวเอง แต่ต้องเป็นรหัสที่ ASCII code ยังไม่ได้ใช้ เช่น 1000011 เป็น ‘ก’, 1000012 เป็น ‘ข’, 1000013 เป็น ‘ค’ เป็นต้น
วิธีการเช่นนี้ทำให้เราสามารถเก็บได้ 2 ภาษา แต่ว่าการทำแบบนี้ไม่ international เพราะว่า ภาษาจีนหรือภาษาญี่ปุ่นก็ใช้แบบเดียวกัน ก็เอา bit ที่ 8 มาใช้ เพราะฉะนั้นแล้ว ตัว ‘ก’ ของภาษาไทยก็จะไปมีรหัสเหมือนกับตัวอะไรซักอย่างในภาษาจีน ดังนั้นก็เลยมีปัญหาว่าถ้าเราต้องการทำ international business จริงๆ ควรจะมีรหัสเดียวสำหรับอักษรตัวเดียว และในแต่ละภาษาก็ไม่ควรมีรหัสซ้ำกัน
ดังนั้นเราก็เลยมี Unicode ขึ้นมา Unicode ต่างจาก ASCII คือ ASCII เก็บ byte เดียว แต่ Unicode เก็บ 2 byte ซึ่งข้อมูล 2 byte เก็บข้อมูลได้มากมายมหาศาล สามารถเก็บข้อมูลได้มากมายหลายภาษาในโลก อย่างภาษาไทยก็อยู่ใน Unicode นี้ด้วยเหมือนกัน ดังนั้นรหัสภาษาไทยเอาไปเปิดในภาษาจีน ก็ยังเป็นภาษาไทยอยู่ ไม่ออกมาเป็นภาษาจีน เพราะว่ามี code ตายตัวอยู่ว่า code นี้จองไว้สำหรับภาษาไทย แล้ว code ตรงช่วงนี้เป็นภาษาจีน ตรงนี้เป็นภาษาญี่ปุ่น จะไม่ใช้ที่ซ้ำกัน เป็นต้น
2. หลักการทำงานของ Unicode
รหัสแบบที่กำหนด 1 byte หรือ 8 บิตสำหรับ 1 ตัวอักษรนั้นมีความเหมาะสมและเพียงพอสำหรับภาษาที่ใช้ตัวอักขระแต่ละตัวแทนเสียงในภาษา (alphabetical language) แต่สำหรับภาษาที่เขียนโดยใช้ตัวอักขระแทนพยางค์หรือหน่วยคำ เช่น ภาษาญี่ปุ่น ภาษาจีน จะมีจำนวนอักขระที่เขียนเป็นจำนวนมากเกินกว่าที่จะแทนด้วย 1 byte ได้ (ซึ่งแทนได้เพียง 256 แบบของตัวอักขระ) อีกทั้งเมื่อมีการใช้รหัสอักขระที่แตกต่างกัน ก็จะมีผลต่อการย้ายข้อมูลข้ามภาษา เช่น รหัสที่แทนตัวอักขระ ก ที่ใช้ภาษาไทยจะไปตรงกับรหัสตัวอักขระ ¡ ในอีกตารางหนึ่ง เป็นต้น จึงมีความพยายามแก้ปัญหาให้มีรหัสเดียวที่ใช้ได้กับอักขระทุกภาษา ซึ่งเป็นที่มาของการพัฒนารหัส Unicode ขึ้นมาตั้งแต่ปีค.ศ.1991 (Unicode 1.0) โดยที่รหัสตัวอักขระ 256 ตัวแรกนั้นจะเหมือนกับรหัสของ ISO-8859 ปัจจุบันพัฒนามาถึง Unicode 5.1
หลักการของ Unicode คือแต่ละตัวอักขระที่ใช้ในภาษาต่างๆ จะมีรหัสเฉพาะของตน แต่รูปแบบของการเข้ารหัสแบบ Unicode นั้นมีได้หลายแบบ เป็นการแปลงรหัส Unicode ที่กำหนดหรือที่เรียกว่า Unicode transformation format (UTF) เป็นชุดของ byte เฉพาะสำหรับแต่ละอักขระ (unique byte sequence) ในแบบที่ง่ายสุดคือใช้จำนวนบิตคงที่(เหมือนการแทนรหัสแบบอื่นที่กล่าวมา) จะใช้จำนวน 32 บิตสำหรับแต่ละอักขระ (4 bytes/character) (เรียกว่า UTF-32) แต่จะเสียเนื้อที่เก็บข้อมูลมากไม่ประหยัด และเพราะตัวอักษรต่างๆที่ใช้บ่อยๆ ก็มักเป็นเหมือนรหัส ISO-8859 ซึ่งใช้เพียง 8 บิตสำหรับแต่ละตัวอักษรก็พอ จึงมีการคิดวิธีการเข้ารหัสที่ประหยัดที่เก็บมากขึ้นโดยจำนวนบิตของแต่ละอักขระไม่จำเป็นต้องคงที่การเข้ารหัสแบบ UTF-16 กำหนดให้ตัวอักขระที่ใช้บ่อยๆ เก็บ 16 บิต ส่วนตัวอักขระที่ใช้ไม่บ่อยจะเก็บเป็น 32 บิต (2-4
bytes/character) ส่วนการเข้ารหัสแบบ UTF-8 จะยิ่งประหยัดมากขึ้น เพราะตัวอักขระที่ใช้บ่อยจะเก็บ 8 บิตส่วนตัวอักขระอื่นๆ อาจเก็บ 16 หรือ 32 บิต (1-4 bytes/character) จึงทำให้ประหยัดที่เก็บข้อมูลมากขึ้น
รหัสแบบ Unicode นี้เป็นที่คาดการณ์ว่าจะเป็นมาตรฐานสำหรับการเก็บข้อมูลภาษาในคอมพิวเตอร์ในอนาคต
3.รูปแบบการเข้ารหัสตัวอักษรที่เป็น Unicode
การเข้ารหัสตัวอักษรในระบบ Unicode มีมากมายหลายวิธีซึ่งวิธีที่ใช้กันเป็นที่ทั่วไปคือ UTF-16 ใช้กันมากในระบบปฏิบัติการ Windows และ UTF-8 ถูกใช้ในระบบปฏิบัติการ Linux
UTF-16
16-bit Unicode Transformation Format เป็นวิธีการเข้ารหัสของ Unicode ในรูปแบบ 16 bits ต่อ 1 ตัวอักษร ซึ่งเรียกว่า code units ซึ่งการเข้ารหัสจะใช้ระบบ Basic Multilingual Plane (BMP) มากำหนดลำดับตัวอักษร โดยตำแหน่ง code ที่มีตัวอักษรจะอยู่ในช่วง U+0000 ถึง U+10FFFF ยกเว้น code ที่อยู่ระหว่าง U+D800 ถึง U+DFFF (ซึ่งจะไม่มีตัวอักษรใดๆ เลย) จะเป็นส่วนที่กำหนดไว้รองร้บตัวอักษรที่จะถูกกำหนดในอนาคต
การแบ่งระนาบของ Unicode
อักขระใน Unicode นั้นจะแบ่งออกเป็นส่วนต่างได้หลายส่วน โดยการจัดแยกออกเป็นส่วนย่อยๆไว้ในรูปเชิงตรรกะ เป็น 17 ระนาบ โดยแต่ละระนาบจะแทนค่าได้ 65,536= (216) ค่า ถึงอย่าไรก็ตามมีเพียงบางระนาบเท่านั้นที่ถูกใช้งาน
Plane 0 (0000–FFFF): Basic Multilingual Plane (BMP). ในระนาบนี้จะเป็นการเก็บอักขระส่วนใหญ่ของแต่ละภาษาที่ใช้กันอยู่เป็นประจำ จุดประสงค์หลักสำหรับBMP คือ สนับสนุนความสอดคล้องกันของตัวอักขระ รวมทั้งตัวอักขระของแต่ละภาษา ในปัจจุบัน
Plane 1 (10000–1FFFF): Supplementary Multilingual Plane (SMP).
Plane 2 (20000–2FFFF): Supplementary Ideographic Plane (SIP)
Planes 3 to 13 (30000–DFFFF) ยังไม่ถูกใช้งาน
Plane 14 (E0000–EFFFF): Supplementary Special-purpose Plane (SSP)
Plane 15 (F0000–FFFFF) reserved for the Private Use Area (PUA)
Plane 16 (100000–10FFFF), reserved for the Private Use Area (PUA)
ระนาบสำหรับตัวอักษรพื้นฐาน (ระนาบที่ 0)
ภาพรวมของ Basic Multilingual Plane จะทำงานโดยในแต่ละชุดของอักขระจะประกอบด้วยรหัส 256 รหัสในการชี้ตำแหน่งของอักขระ
Basic Multilingual Plane (BMP), เป็นระนาบที่มีอักขระบรรจุอยู่มากที่สุด โดยอักขระสมัยใหม่และอักขระพิเศษเกือบทั้งหมดจะถูกบรรจุอยู่ระนาบนี้
ระนาบเพิ่มเติมสำหรับตัวอักษร(ระนาบที่ 1)
Supplementary Multilingual Plane (SMP), ในระนาบนี้ส่วนใหญ่จะใช้ในการเก็บอักขระที่เกี่ยวข้องกับประวัติศาสตร์ รวมไปถึงสัญลักษณ์ทางดนตรีและคณิตศาสตร์อีกด้วย
ระนาบเพิ่มเติมสำหรับอักษรภาพแสดงความหมาย (ระนาบที่ 2)
Supplementary Ideographic Plane (SIP), ถูกใช้ไปแล้วประมาณ 40,000 ในการแทนคำที่ใช้แทนความคิด หรือที่ใช้ 1 คำแทน 1 สิ่งเช่นในภาษาจีนที่ใช้1อักขระแทนหนึ่งคำ
ระนาบที่ยังไม่ได้นำไปใช้งาน (ระนาบที่ 3 ถึง ระนาบที่ 13)
ยังไม่มีการกำหนดค่าให้กับ plane3 ถึง plane13 เพราะในอนาคตยังไม่แน่ว่าจะเกิดอะไรขึ้นบ้างจึงไม่สามารถระบุขนาดที่แน่นอนของตัวโค้ดได้
ระนาบสำหรับวัตถุประสงค์พิเศษ (ระนาบที่ 14)
Plane 14 (E in hexadecimal), ส่วนเพิ่มเติมสำหรับวัตถุประสงค์เฉพาะ (SSP: Supplementary Special- purpose Plane) ปัจจุบันใช้แทนค่าตัวอักขระที่ไม่ใช่กราฟิกในสองกลุ่มระเบียนคือ 128 ใช้แทน ค่าตัวอักขระแบบแทก (Tag Language) ที่ยังไม่สามารถแทนค่าได้ตามปกติตัวอย่างเช่นในภาษา เอกซ์เอ็มแอล(XML) และกลุ่มระเบียน 240 ใช้แทนค่าตัวอักขระที่ไม่สามารถเขียนแทนได้ในข้อความ ทั่วไป
ระนาบสงวนการใช้งาน (ระนาบที่ 15 และ ระนาบที่ 16)
ระนาบทั้ง 15 และ 16 นี้ถูกออกแบบโดยกรรมการชุดอื่น ที่ไม่ใช่จากหน่วยงานของไอเอสโอ หรือ คณะกรรมการของยูนิโค้ด เพื่อรองรับการทำงานของอักขระบางกลุ่มที่มีลักษณะพิเศษ เช่น เขียนจากขวาไปซ้าย เป็นต้น
Basic Multilingual Plane
เป็นรูปแบบการกำหนดตัวอักษรแรก โดย Basic Multilingual Plane (BMP) ได้กำหนดตัวอักษรสมัยใหม่ที่ใช้กันอย่างกว้างขวาง รวมถึงตัวเลข และสัญลักษณ์พิเศษ รวมถึงการกำหนดตำแหน่ง code ของ BMP ที่มีการนำภาษาจีน ญี่ปุ่น และเกาหลีด้วย
Plane 0 (0000–FFFF): Basic Multilingual Plane (BMP). ในระนาบนี้จะเป็นการเก็บอักขระส่วนใหญ่ของแต่ละภาษาที่ใช้กันอยู่เป็นประจำ จุดประสงค์หลักสำหรับBMP คือ สนับสนุนความสอดคล้องกันของตัวอักขระ รวมทั้งตัวอักขระของแต่ละภาษา ในปัจจุบัน
BMP ใน Unicode 5.0 ได้มีการรวบรวม code จากภาษาต่างๆ ตามลำดับดังนี้
Basic Latin (0000–007F)
|
Ethiopic (1200–137F)
|
Latin-1 Supplement (0080–00FF)
|
Ethiopic Supplement (1380–139F)
|
Latin Extended-A (0100–017F)
|
Cherokee (13A0–13FF)
|
Latin Extended-B (0180–024F)
|
Unified Canadian Aboriginal Syllabics (1400–167F)
|
IPA Extensions (0250–02AF)
|
Ogham (1680–169F)
|
Spacing Modifier Letters (02B0–02FF)
|
Runic (16A0–16FF)
|
Combining Diacritical Marks (0300–036F)
|
Philippine scripts:
|
Greek and Coptic (0370–03FF)
|
Tagalog (1700–171F)
|
Cyrillic (0400–04FF)
|
Hanunóo (1720–173F)
|
Cyrillic Supplement (0500–052F)
|
Buhid (1740–175F)
|
Armenian (0530–058F)
|
Tagbanwa (1760–177F)
|
Hebrew (0590–05FF)
|
Khmer (1780–17FF)
|
Arabic (0600–06FF)
|
Mongolian (1800–18AF)
|
Syriac (0700–074F)
|
Limbu (1900–194F)
|
Arabic Supplement (0750–077F)
|
Tai Le (1950–197F)
|
Thaana (0780–07BF)
|
New Tai Lue (1980–19DF)
|
N’Ko (Mandenkan) (07C0–07FF)
|
Khmer Symbols (19E0–19FF)
|
Indic scripts:
|
Buginese (1A00–1A1F)
|
Devanagari (0900–097F)
|
Balinese (1B00–1B7F)
|
Bengali (0980–09FF)
|
Lepcha (Rong) (1C00–1C4F)
|
Gurmukhi (0A00–0A7F)
|
Phonetic Extensions (1D00–1D7F)
|
Gujarati (0A80–0AFF)
|
Phonetic Extensions Supplement (1D80–1DBF)
|
Oriya (0B00–0B7F)
|
Combining Diacritical Marks Supplement (1DC0–1DFF)
|
Tamil (0B80–0BFF)
|
Latin Extended Additional (1E00–1EFF)
|
Telugu (0C00–0C7F)
|
Greek Extended (1F00–1FFF)
|
Kannada (0C80–0CFF)
|
Symbols:
|
Malayalam (0D00–0D7F)
|
General Punctuation (2000–206F)
|
Sinhala (0D80–0DFF)
|
Superscripts and Subscripts (2070–209F)
|
Thai (0E00–0E7F)
|
Currency Symbols (20A0–20CF)
|
Lao (0E80–0EFF)
|
Combining Diacritical Marks for Symbols (20D0–20FF)
|
Tibetan (0F00–0FFF)
|
Letterlike Symbols (2100–214F)
|
Burmese (1000–109F)
|
Number Forms (2150–218F)
|
Georgian (10A0–10FF)
|
Arrows (2190–21FF)
|
Hangul Jamo (1100–11FF)
|
Mathematical Operators (2200–22FF)
|
|
|
|
|
Miscellaneous Technical (2300–23FF)
|
Katakana Phonetic Extensions (31F0–31FF)
|
Control Pictures (2400–243F)
|
Enclosed CJK Letters and Months (3200–32FF)
|
Optical Character Recognition (2440–245F)
|
CJK Compatibility (3300–33FF)
|
Enclosed Alphanumerics (2460–24FF)
|
CJK Unified Ideographs Extension A (3400–4DBF)
|
Box Drawing (2500–257F)
|
Yijing Hexagram Symbols (4DC0–4DFF)
|
Block Elements (2580–259F)
|
CJK Unified Ideographs (4E00–9FFF)
|
Geometric Shapes (25A0–25FF)
|
Yi Syllables (A000–A48F)
|
Miscellaneous Symbols (2600–26FF)
|
Yi Radicals (A490–A4CF)
|
Dingbats (2700–27BF)
|
Modifier Tone Letters (A700–A71F)
|
Miscellaneous Mathematical Symbols-A (27C0–27EF)
|
Latin Extended-D (A720–A7FF)
|
Supplemental Arrows-A (27F0–27FF)
|
Syloti Nagri (A800–A82F)
|
Braille Patterns (2800–28FF)
|
Phags-pa (A840–A87F)
|
Supplemental Arrows-B (2900–297F)
|
Hangul Syllables (AC00–D7AF)
|
Miscellaneous Mathematical Symbols-B (2980–29FF)
|
High Surrogates (D800–DB7F)
|
Supplemental Mathematical Operators (2A00–2AFF)
|
High Private Use Surrogates (DB80–DBFF)
|
Miscellaneous Symbols and Arrows (2B00–2BFF)
|
Low Surrogates (DC00–DFFF)
|
Glagolitic (2C00–2C5F)
|
Private Use Area (E000–F8FF)
|
Latin Extended-C (2C60–2C7F)
|
CJK Compatibility Ideographs (F900–FAFF)
|
Coptic (2C80–2CFF)
|
Alphabetic Presentation Forms (FB00–FB4F)
|
Georgian Supplement (2D00–2D2F)
|
Arabic Presentation Forms-A (FB50–FDFF)
|
Tifinagh (2D30–2D7F)
|
Variation Selectors (FE00–FE0F)
|
Ethiopic Extended (2D80–2DDF)
|
Vertical Forms (FE10–FE1F)
|
Supplemental Punctuation (2E00–2E7F)
|
Combining Half Marks (FE20–FE2F)
|
CJK Radicals Supplement (2E80–2EFF)
|
CJK Compatibility Forms (FE30–FE4F)
|
Kangxi Radicals (2F00–2FDF)
|
Small Form Variants (FE50–FE6F)
|
Ideographic Description Characters (2FF0–2FFF)
|
Arabic Presentation Forms-B (FE70–FEFF)
|
CJK Symbols and Punctuation (3000–303F)
|
Halfwidth and Fullwidth Forms (FF00–FFEF)
|
Hiragana (3040–309F)
|
Specials (FFF0–FFFF)
|
Katakana (30A0–30FF)
|
|
Bopomofo (3100–312F)
|
|
Hangul Compatibility Jamo (3130–318F)
|
|
Kanbun (3190–319F)
|
|
Bopomofo Extended (31A0–31BF)
|
|
CJK Strokes (31C0–31EF)
|
|
จากรูปที4 UTF-16 สามารถเข้ารหัสได้ถึง 216 ทำให้สามารถกำหนดตัวอักษรได้ถึง 65536 ตัวอักษร ซึ่งสามารถรองรับตัวอักษรที่มีในโลกได้จำนวนมากทำให้มีการนำ UTF-16 มาใช้ในระบบปฏิบัติการโดยเฉพาะระบบปฏิบัติการที่พัฒนาโดย Microsoft ทำให้ระบบสามารถแสดงผลที่เป็นภาษาอื่นได้หลากหลายมากขึ้น
UTF-8
เนื่องจากการกำหนดการเข้ารหัสของ UTF-16 แต่ละตัวอักษรต้องใช้จำนวน 16 bits ทุกตัวทำให้ไฟล์หรือข้อมูลที่มีการเข้ารหัสในรูปแบบ UTF-16 มีขนาดใหญ่มาก ซึ่งก่อนหน้านี้มีข้อจำกัดในเรื่องขนาดที่เก็บของข้อมูลรวมถึงข้อจำกัดในเรื่องความเร็วของการส่งข้อมูลผ่านระบบเน็ตเวิร์คในสมัยก่อนยังมีความล่าช้า ทำให้ UTF-16 ยังไม่เป็นที่นิยมเท่าที่ควร และหลังจากที่ได้มีการพัฒนาระบบให้มีความทันสมัยมากขึ้นระบบ UTF-16 ก็ได้ถูกนำมาใช้งานมากขึ้น แต่เนื่องด้วยขนาดตัวอักษรที่มีเพียง 65536 ตัวอักษร ซึ่งสามารถรองรับภาษาและสัญลักษณ์ที่ใช้อยู่ในปัจจุบันได้ แต่เมื่อต้องการใช้ตัวอักษรที่มีมาในอดีต ซึ่งมีมากมายจึงต้องหาวิธีการที่จะเพิ่มขนาดของรหัสตัวอักษรรวมถึงหาวิธีการที่จะลดขนาดของข้อมูลต่อตัวอักษรให้ได้มากที่สุด จึงได้มีการกำหนดวิธีการแบบ UTF-8 ขึ้นมา
การแทนค่าสำหรับแต่ละระนาบแสดงได้ดังตารางนี้
Unicode mapping tables
|
BMP
|
SMP
|
SIP
|
SSP
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
รูปที่5แสดง การแทนค่าสำหรับแต่ละระนาบ