ISO 8859

ISO 8859, או ISO/IEC 8859 באופן רשמי יותר, הוא תקן לקידוד תווים ב־8 סיביות. התקן מכיל 15 חלקים (ממוספרים, למשל ISO 8859-2 לחלק השני) בהתאם לכתב הנוסף ללטינית בסיסית שבו כל תקן תומך. ISO 8859 מבוסס על ASCII. תקן ASCII הוא קידוד בן 7 סיביות המקודד את האלפבית הלטיני הבסיסי (כלומר ללא אקצנטים) ומספרים וסימני פיסוק וכן תווי בקרה במספרים 0x00 עד 0x7F (בכתיב הקסדצימלי). כל החלקים של תקן ISO 8859 נאמנים לקידוד זה והם תואמים את ASCII ב־128 המקומות הראשונים שלהם. הם מרחיבים את ASCII בכך שהם מקצים תווים נוספים ל־128 המקומות הבאים, 0x80 עד 0xFF. החלקים של ISO 8859 בנויים, עד כמה שאפשר, כך: קודים 0x80 עד 0x9F מוקדשים לתווי בקרה (התחום הנקרא C1, להבדיל מ־C0, שהוא תחום תווי הבקרה של ASCII). קודים 0xA0 עד 0xBF מוקצים לסימנים שונים, כגון פיסוק, מטבע ומספרים עיליים. קודים 0xC0 עד 0xDF ניתנים, אם אפשר, לאותיות לטיניות גדולות עם סימנים דיאקריטיים (אקצנטים). קודים 0xE0 עד 0xFF ניתנים, אם אפשר, לאותיות לטיניות קטנות עם סימנים דיאקריטיים (אקצנטים). יש לשים לב כי קידודי 8 הסיביות של Windows נבדלים מקידודי ISO 8859 בכך שהם מקצים תווים גרפיים במקום תווי הבקרה בתחום 0x80 עד 0x9F. למשל 0x97 בקידוד מערב־אירופה של Windows הוא המקף הארוך. השימוש בתווים אלה אינו תקני והוא עלול לגרום לתופעות לא רצויות (כגון סימני שאלה) בהתקני תצוגה ההולכים לפי ISO 8859. רצוי לקודד תווים אלה ביוניקוד. לתקן ISO 8859 ישנם 16 חלקים, בהתאם לשפה ולמיקום בה הטקסט נכתב ואליו הוא מיועד: ISO 8859-1: מערב־אירופה או Latin-1. מכסה את השפות הבאות: בסקית, קטלאנית, דנית, אנגלית, שפת איי פארו, גרמנית, איסלנדית, אירית, איטלקית, נורווגית, פורטוגלית, רטו־רומאנית, סקוטית, ספרדית, אלבנית וכן את השפות האפריקאיות אפריקנס וסוואחלי. התקן מכסה באופן חלקי את ההולנדית, הצרפתית והפינית. ISO 8859-2: מרכז־אירופה או Latin-2. מכסה את השפות במרכז אירופה או מזרחה המשתמשות באלפבית הלטיני, כגון: פולנית, צ'כית, סלובקית, סלובנית והונגרית. ISO 8859-3: דרום־אירופה. טורקית, מלטזית ואספרנטו. בטורקית נהוג להשתמש ב־ISO 8859-9 ובאספרנטו ביוניקוד. ISO 8859-4: צפון־אירופה. אסטונית, לטבית, ליטאית, גרנלנדית וסאמי. ISO 8859-5: קירילית. בלארוסית, בולגרית, מקדונית, רוסית, סרבית ואוקראינית. השימוש בקידוד זה נדיר ביותר. בדרך־כלל משתמשים בקידודי KOI או Windows כדי לקודד קירילית. ISO 8859-6: ערבית. תומך בשפה הערבית בלבד, לא בשפות נוספות הנכתבות בכתב הערבי כמו פרסית ואורדו. ISO 8859-7: יוונית מודרנית (מונוטונית, כלומר עם סוג אקצנט אחד בלבד, להבדיל מהעתיקה הפוליטונית). ISO 8859-8: עברית (ללא ניקוד). תקן זה נחלק לשניים: ISO 8859-8 או ISO 8859-8-E לעברית חזותית (ויזואלית) ו־ISO 8859-8-I לעברית משתמעת (לוגית). עברית של Windows (תקן Windows-1255) תואמת לו באותיות אך מוסיפה ניקוד והיא משתמעת בלבד. ISO 8859-9: טורקית. מחליף את האותיות האיסלנדיות של ISO 8859-1 באותיות טורקיות. משמש גם לכורדית. ISO 8859-10: נורדית. סידור מחדש של ISO 8859-4 לשפות צפון־אירופה. השפות הבלטיות ממשיכות להשתמש ב־ISO-8859-4. ISO 8859-11: תאילנדית. ISO 8859-12: תקן לקלטית שנדחה מפני ISO 8859-14. ISO 8859-13: בלטית. בו הוספו כמה תווים חסרים לשפות הבלטיות. ISO 8859-14: קלטית, למשל גאלית ובריטונית. ISO 8859-15: תיקון ל־ISO 8859-1 המסיר כמה סימנים פחות שימושיים ומקצה במקומם את סימן האירו וכמה תווים הנחוצים לצרפתית ופינית. ISO 8859-16: דרום־מזרח אירופה. תקן לאלבנית, קרואטית, הונגרית, איטלקית, פולנית, רומנית וסלובנית, אך גם לפינית, צרפתית, גרמנית ואירית גאלית. ISO 8859 אומץ בהתלהבות משום שהוא פתרון טוב לאין ערוך מהווריאנטים של ASCII (המסודרים בתקן ISO 646). עם זאת, אין הוא הפתרון האולטימטיבי, משום שהוא סובל מאותה בעיה של רב־משמעות של הקודים. למשל, הקוד 0xE0 יכול להיות à או ŕ או ā או р (קירילית) או ΰ (יוונית) או א, תלוי בקידוד. דבר זה נסבל כשעובדים בסביבה אחידה של שפה אחת, אך ברגע שמעבירים נתונים מסביבה לסביבה, כמו באינטרנט, יוצר הדבר בעיות. הפתרון האולטימטיבי למגדל בבל זה של קידודים שונים הוא קידוד המאחד את כל הקידודים והמקצה קוד אחד ויחיד וחד־משמעי לכל תו. קידוד כזה הוא יוניקוד, שהתפתח ונקבע כדי לענות על הצורך הזה. בתקן יוניקוד עצמו, התווים U+0000 עד U+00FF זהים לתווים 0x00 עד 0xFF בתקן ISO 8859-1. אולם מעבר לכך אין תאימות בין יוניקוד לבין ISO 8859, אם כי הנטייה היא לסדר את התווים באותם מיקומים יחסיים כמו בתקני ISO 8859 (למשל U+05D0 עד U+05EA לאותיות העבריות כמו ש־ISO 8859-8 מקצה להם את המקומות 0xE0 עד 0xFA). קידוד UTF-8 שובר עוד יותר את התאימות עם ISO 8859-1 בכך שהאותיות הלטיניות עם האקצנטים בכלל לא נראות בו באותו אופן כמו ב־ISO 8859-1 (למשל à הוא 0xE0 ב־ISO 8859-1 אך 0xC3 0xA0 ב־UTF-8).