UTF-16 – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
ArthurBot (שיחה | תרומות)
מ בוט מוסיף: cs:UTF-16
מ הגהה
שורה 1:
'''UTF-16''' הוא הקידוד[[קידוד תווים|קידוד]] של כל [[תו (מחשב)|תו]] [[יוניקוד]] באמצעות קבוצה אחת או שנייםשתיים של 16 [[סיבית|סיביות]], כלומר 2 או 4 בתים לכל תו, בהתאם לתו. את רוב התווים מקודדים ב־16 סיביות, ורק תווים נדירים והיסטוריים מקודדים ב־32 סיביות.
 
==רקע==
 
ב־1990, כאשר הוחל בתקינת תקן יוניקוד לקידוד כל כתבי האנושות באופןתווים אחיד, עלה במחשבה כי אין צורך אלא בהרחבת הקידוד לכל תו מבית אחד (8 סיביות) ל־2 בתים (16 סיביות). קידוד כזה נותן מקום ל־65,536 תווים, והמייסדים של יוניקוד סברו כי מספר זה יספיק. תוכנן כי אותיות עם אקצנטים והברות קוריאניות יקודדו באמצעות יסודות מתחברים (combining characters), דבר שיחסוך במקומות, וכי תווים היסטוריים (כמו גותית ואוגריתית) יקודדו בתוך אזור השימוש הפרטי (private use area) של יוניקוד, במקומות U+A000 עד U+FAFF (מספרים ב[[בסיס הקסדצימלי|הקסדצימליתהקסדצימליים]]). כך היה המצב בגרסה 1 של תקן יוניקוד.
 
ברם, כעבור כמה שנים השתנו הדברים תכלית שינוי. לצורך תאימות לאחור הוחלט על הקצאת מקומות לתווים מחוברים, כלומר במקום לקודד את האות ē כשני תווים, האות e ולאחריה קו עליון מתחבר, לקודד את כל הסימן הזה כתו אחד. כך נהיהעלה צורךהצורך להקצות אלפי מקומותקודים לקידוד ההברות הקוריאניות (אשר הועברו למקומות U+AC00 עד U+D7FF, ואזור השימוש הפרטי הועבר ל־U+D800 עד U+FAFF), והתחזיות לשימוש העתידי של קידוד 16 סיביות התבדו. מתכנני יוניקוד הבינו כי 65,536 תווים אינם מספיקים לכל הצרכים, וכך נולד UTF-16, שהוא הרחבה של גרסה 1 של יוניקוד.
 
==תיאור הקידוד==
 
UTF-16 פועל כך: ב־2,048 תווים מתוך ה־65,536 הראשונים משתמשים כדי למעןלמיעון 1024×1024, כלומר 1,048,576, תווים נוספים. הקודים האלה הם U+D800 עד U+DBFF לחצי הראשון ו־U+DC00 עד U+DFFF לחצי השני. צירוף של קוד מהחצי הראשון ולאחריו קוד מהחצי השני משמש למיעון תו יוניקוד מעבר ל־U+FFFF, כלומר מ־U+10000 עד U+10FFFF. למשל, הצירוף D84C DFB4 ממען את התו U+233B4 (שהוא סימן סיני נדיר). מנגנון זה נקרא מנגנון '''ממלאי המקום''' או באנגלית surrogates.
 
תחת קידוד זה, יוניקוד מגרסה 2 ואילך יכולהיכול להכיל 1,112,064 תווים, די והותר לכל שימוש עתידי.
 
==שימושים במערכות קיימות==
 
בקידוד UTF-16 משתמשים מערכות [[Windows]] (החדשות יותר - NT ו־2000 ו־XP) ומצע [[Java]]. אלה השתמשו במקור ביוניקוד המקורי של 16 סיביות ועברו ל־UTF-16 לאחר מכן. ב־Windows ניתן לאחסן קובצי טקסט בקידוד UTF-16 או [[UTF-8]], אך בזיכרון יימצא הטקסט תמיד כ־UTF-16. ב־Windows הבתים יופיעו בסדר little-endian, בשל השימוש של מעבדי [[אינטל]] בסדר זה, ואילו ב־Java הם יהיו בסדר big-endian.
 
==השפעה על קידודי יוניקוד האחרים==
 
קידוד [[UTF-8]] יכול למען בעיקרון עד 2,147,483,647 תווים, עד U+7FFFFFFF. תקן [[ISO 10646]], שהיה תחילה נפרד מיוניקוד אך אוחד איתו אחר־כך, מכיל צורת קידוד של 32 סיביות לכל תו היכולה למען מספר זהה לזה של UTF-8. ואולם, כאשר UTF-16 יצאה לאורפורסם, הוחלט כי תקני יוניקוד ו־ISO 10646 יגבילו את תחום התווים עד לתחום האפשרי של UTF-16, כלומר עד U+10FFFF. כתוצאה מכך, צורות הקידוד האחרות של יוניקוד, UTF-8 (אחד עד ארבעה בתים לכל תו) ו־[[UTF-32]] (ארבעה בתים לכל תו), מוגבלות בגרסאות הנוכחיות של יוניקוד למיעון של קצת יותר ממיליון תווים, על אף שהן יכולות באופן עקרוני למען למעלה משני מיליארד תווים.
 
[[קטגוריה:קידוד נתונים]]