UTF-16 הוא קידוד של כל תו יוניקוד באמצעות קבוצה אחת או שתיים של 16 סיביות. 16 סיביות זה שני בתים. רוב התווים מקודדים ב־16 סיביות, ותווים נדירים יותר מקודדים ב־32 סיביות בעזרת זוגות מיוחדים.
במקור חשבו שיוניקוד ב־16 סיביות יספיק, כי זה מאפשר 65,536 תווים. עם הזמן הבינו שמילים עם תווים מחוברים (כמו אות עם ניקוד) ותווים קוריאניים דורשים קידוד כיחידות בודדות במקום איחוד של סימנים. לכן הוצע להרחיב את הקידוד. כך נוצר UTF-16, הרחבה של יוניקוד המקורי שמאפשרת קידוד תווים נדירים יותר.
UTF-16 משתמש במה שנקרא "ממלאי מקום" (surrogates). יש שני טווחים של קודים מיוחדים: U+D800 עד U+DBFF הם חציין גבוהים, ו־U+DC00 עד U+DFFF הם חציין נמוכים. אלה מהווים 2,048 יחידות מתוך ה־65,536 המקוריים (1024+1024).
שילוב של קוד גבוה ואז קוד נמוך מייצג תו שמעבר ל־U+FFFF, כלומר מ־U+10000 ועד U+10FFFF. כך אפשר להוסיף 1,048,576 תווים נוספים. לדוגמה, הצירוף D84C DFB4 מקודד את התו U+233B4, תו סיני נדיר.
בסך הכל, מאז גרסה 2 יוניקוד יכול להכיל 1,112,064 תווים, מספיק לרוב השימושים.
מערכות Windows חדשות (NT, 2000, XP) וסביבת Java משתמשות ב־UTF-16 בזיכרון. ב־Windows קבצי טקסט יכולים להיות גם ב־UTF-8, אבל בזיכרון הטקסט מאוחסן כ־UTF-16. על מערכות אינטל נשמרים הבתים בסדר little-endian (בתים מהקטן לגדול), בעוד ש־Java משתמשת בסדר big-endian (ההפוך).
לפני כן היו רעיונות לקידוד שיכול להגיע רחוק יותר, כמו UTF-8 ו־UTF-32 בתיאור תאורטי עד מיליארדי קודים. עם פרסום UTF-16 הוחלט להגביל את טווח התווים של תקן יוניקוד (וגם של ISO 10646) לתחום U+10FFFF. לכן בגרסאות הנוכחיות גם UTF-8 ו־UTF-32 מוגבלות עד מעט יותר ממיליון תווים, אף שהן בהגדרתן יכולות לתמוך ביותר.
UTF-16 הוא דרך לכתוב כל אות במחשב. סיבית (יחידת מידע קטנה) היא הבסיס. 16 סיביות שוות לשני בתים.
בהתחלה חשבו ש־16 סיביות יספיקו לכולם. אבל נדרשו תווים מיוחדים ותווים משפות שונות. לכן בנו שיטה שמוסיפה אפשרויות.
ב־UTF-16 יש "ממלאים" מיוחדים. אלה הם שתי קבוצות של קודים. קוד אחד מהקבוצה הראשונה ואחד מהשנייה יוצרים תו גדול יותר.
כך אפשר לקודד תווים נדירים מחוץ לטווח הרגיל. לדוגמה, זוג הקודים D84C ו־DFB4 מייצג תו סיני נדיר שנקרא U+233B4.
מערכות Windows חדשות ותוכנת Java שומרות טקסט בזיכרון כ־UTF-16. ב־Windows הבתים מסודרים בסגנון little-endian. ב־Java הם מסודרים ב־big-endian.
לפני כן חשבו שאפשר לפתוח הרבה מאוד תווים. אחרי שנקבע UTF-16, הוחלט להגביל את יוניקוד עד U+10FFFF. לכן גם שיטות אחרות כמו UTF-8 ו־UTF-32 מוגבלות היום.
תגובות גולשים