תקן **ISO 10646** של ארגון התקינה הבין-לאומי (ISO) הוא תקן למפת תווים אוניברסלית (UCS, ראשי תיבות של Universal Character Set) שנועד לאחד את כל מפות התווים שבשימוש כיום ולקודד את כל הכתבים הנוכחיים וההיסטוריים של האנושות. כיום תקן זה מאוחד עם תקן אחר למפת תווים אוניברסלית בשם יוניקוד. הוא עדיין נבדל ממנו בכמה תכונות, אך אין הוא שונה ממנו בפרטים כפי שהיה בעבר.

היסטוריה
--------

ארגון ISO יזם את מפת התווים האוניברסלית ב־1989, והטיוטה של תקן ISO 10646 יצאה לאור ב־1990. תקן זה היה שונה מאוד מהתקן של היום. הוגדרו בו 128 קבוצות (groups) בעלות 256 משטחים (planes) בעלי 256 שורות (rows) בעלות 256 תאים (cells) - לכאורה מקום ל־2,147,483,648 תווים, אך למעשה אפשר היה לקודד רק 679,477,248 תווים, שכן המדיניות הייתה שלא יופיעו תווי בקרה (הבתים 0x00 עד 0x1F ו־0x80 עד 0x9F, בכתיב הקסדצימלי) בשום מקום. כך למשל האות הלטינית A הופיעה בקבוצה 32, משטח 32, שורה 32, תא 65.

את תווי תקן ISO 10646 הראשוני הזה ניתן היה לקודד בשלוש צורות: UCS-4, ארבעה בתים לכל תו, המאפשרת לקודד את כל התווים; UCS-2, שני בתים לכל תו, המאפשרת לקודד רק את המשטח הראשון, 32, המשטח הרב־לשוני הבסיסי, המכיל את 65,536 התווים הראשונים; ו־UTF-1, שבו מקודדים את כל התווים בקבוצות של בתים בעלות אורך משתנה (אחד עד חמישה בתים, שכולם מכילים תווים שאינם תווי בקרה - ראו לעיל).

הנה כי כן ב־1990 היו שתי יוזמות למפת תווים אוניברסלית: יוניקוד, בת 16 הסיביות לכל תו (65,536 תווים אפשריים) ו־ISO 10646. חברות התוכנה לא היו מוכנות לסבול את הסיבוכיות ואת המגבלות של תקן ISO והצביעו נגד התקן בהצבעה הכללית של מוסדות התקינה. אנשי ISO הבינו כי לא יוכלו להמשיך לתמוך בתקן בצורתו הנוכחית ונדברו עם אנשי יוניקוד על איחוד התקנים. הוחלט על שני שינויים: ההגבלה על התווים (האיסור על תווי הבקרה) תוסר, כך שתו בעל ערך כמו 0x0000101F (המכיל, לפי ערכי הבתים שלו, ארבעה תווי בקרה בזה אחר זה) יהיה מותר לשימוש; והאוצר של המשטח הרב־לשוני הבסיסי של ISO 10646 יהיה זהה לזה של תקן יוניקוד.

בינתיים, עם חלוף השנים, השתנו הדברים ביוניקוד עצמו: 65,536 לא נראו עוד כמספיקים, והתקן מגרסה 2 ואילך תומך בקידוד 1,112,064 תווים באמצעות מנגנון UTF-16. לשם כך הוגבל ISO 10646 להכיל עד כמה תווים שאפשר לקודד באמצעות UTF-16 ולא יותר, כלומר מיליון וקצת תווים במקום שני מיליארד. קידוד UCS-4 של ISO 10646 הוכנס לתקן יוניקוד בהגבלה לתחום של UTF-16 ושמו שונה ל־UTF-32. באשר ל־UTF-1, איש לא השתמש בו, בשל עיצובו הגרוע (אין אפשרות להבחין בתים בודדים ומתחילים ומסיימים של קבוצות - בעיה דומה לזו של הקידוד היפני Shift-JIS) וביצועיו הנמוכים (הרבה פעולות חלוקה). רוב פייק וקן תומפסון, המתכננים של מערכת ההפעלה Plan 9, המציאו קידוד חדש ומהיר ומעוצב היטב לקידוד תווים באורך משתנה, וזה היה ל־UTF-8 המוכר לנו כיום.

הבדלים בין ISO 10646 לבין יוניקוד
---------------------------------

ISO 10646 ויוניקוד זהים לחלוטין באוצר שלהם - אותם תווים בעלי אותם מספרים קיימים בדיוק בשני התקנים. ההבדל ביניהם הוא שתקן יוניקוד מוסיף כמה כללים ומפרטים שאינם קיימים ב־ISO 10646. התקן של ISO אינו אלא מפת תווים פשוטה, המשך של תקנים כמו ISO 8859. יוניקוד, לעומת זאת, מוסיף כללים לסידור האותיות לפי שפה, נורמליזציה של צורות זהות, ואת אלגוריתם הדו־כיווניות. לגבי המשתמש העברי זהו דבר חשוב ביותר והמשמעות היא שמכל תוכנה חדשה יש לדרוש תמיכה ביוניקוד ולא ב־ISO 10646 בלבד. תקן יוניקוד קובע כי העברית תקודד באופן משתמע (לוגי) בלבד, ואילו עברית חזותית (ויזואלית) אינה חוקית לפי יוניקוד.

יש כמה תוכנות שתומכות ב־ISO 10646 אך לא ביוניקוד. למשל, xterm של לינוקס (בגרסאות החדשות) תומך ב־ISO 10646, כלומר הוא מציג את כל התווים שבתקן, אך הוא אינו יכול להציג עברית משתמעת, ערבית או כתבים הודיים כמו אלפבית דוונאגרי, משום שהוא אינו תומך במנגנוני תצוגת הכתבים המורכבים (complex script) המוכתבים על ידי יוניקוד. לעומת זאת, הדפדפן מוזילה ומעבד התמלילים OpenOffice.org, גם על לינוקס, תומכים ביוניקוד על כל מנגנוני התצוגה הנדרשים.