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

תוכן שנמחק תוכן שנוסף
Matanyabot (שיחה | תרומות)
מ בוט החלפות: לעיתים
New in site (שיחה | תרומות)
←‏רציונל הקידוד ונגזרותיו: נמחקו אמירות שיש בהם הבעת עמדה בלתי אובייקטיבית
שורה 98:
* כל בית שהוא בית נוסף (לא הראשון) ברצף של בתים המייצגים תו בודד מתחיל ב-10.
 
כתוצאה מכך, לא ניתן להתבלבל בין בית המייצג תו [[ASCII]] (בית בודד המייצג תו בודד) לבין בית שהוא חלק ממספר בתים המייצגים יחדיו תו אחד (זאת משום שבמקרה הראשון הסיבית המשמעותית ביותר היא 0 ובמקרה השני תהיה הסיבית המשמעותית ביותר 1). באופן כללי יותר, החוקים הנ"ל מבטיחים שלא יכול להתקיים מצב בו רצף בתים המייצג תו מסוים יוכל בתוך רצף בתים גדול יותר המייצג תו אחר. המשמעות של העניין היא שגם אם נסתכל על חלקים מהקידוד, לעולם לא נוכל לפרש אותם כתווים אחרים פרט לתווים שהם יועדו להיות מלכתחילה. לא ייתכן שמתוך ארבעה בתים המייצגים תו, אם נסתכל רק על שניים נוכל לחשוב בטעות שמדובר בתו אחר. אמנם הסימונים הנוספים מביאים לבזבוז של סיביות, היתרונות בשיטה זו ללא כל ספק מאפילים על כך. כעת ניתן להשתמש ב[[אלגוריתם|אלגוריתמי חיפוש]] המסתמכים על הבתים מהם מורכב הטקסט, כדי לחפש מילים או ביטויים בטקסט בצורה יעילה. נוסף על כך, אם בית אחד הושחת או אבד בנסיבות כלשהן (למשל, במהלך העברה ברשת), רק תו אחד ייפגם, שכן ברגע שנגיע לתו הבא נבחין שמתחיל רצף חדש של בתים ולכן תו חדש. בשיטות אחרות, איבוד בית אחד יכול להוביל להשחתה של הטקסט כולו.
 
מבחינה סטטיסטית, אם רצף של בתים עבר את בדיקות ה-UTF-8 והתברר כרצף שעלול לייצג תו או מספר תווים ב-UTF-8, נראה שאכן מדובר בקידוד UTF-8. תכונה זו עוזרת בכך שהיא מונעת מצב בו תוכנה תטעה לחשוב שטקסט מסוים קודד ב-UTF-8, תנסה להציגו כך ויתקבל טקסט לא קריא. תופעה זו שכיחה מאוד בקרב קידודי [[ISO 8859]], שכן לא ניתן להבדיל בין קידוד אחד במשפחה לשני. גולשי אינטרנט ישראלים רבים נתקלו בתופעה של דף המציג אותיות מערב-אירופאיות במקום האותיות העבריות משום שהדפדפן טעה לחשוב שהדף מקודד ב-ISO-8859-1 במקום ISO-8859-8 (שהוא הקידוד המכיל את האותיות העבריות במשפחה).
 
תוספת הסיביות בתחילת כל רצף בתים המייצגים מותירה פחות סיביות לשם ייצוג המספר ולכן דורשת לעיתים בית נוסף. כבר ראינו קודם שהיתרונות בשימוש בסיביות אלה רבים ובהחלט מצדיקים אותו. אף על פי שנראה ש-UTF-8 מוביל לבזבוז מסוים של מקום, ההפך הוא הנכון. דרך בחירת מספר הבתים עבור כל תו מביאה דווקא לחסכון בזיכרון. 128 התווים הראשונים צורכים רק בית אחד, תווים אלו הם תווי ASCII ואלו הם התווים בהם נעשה השימוש הנרחב ביותר בכל הטקסטים בעולם (כל שיטות הקידוד האחרות ליוניקוד יקודדו תווים אלה ביותר מבית אחד). 1920 התווים הבאים צורכים שני בתים לקידוד, אלה כוללים את תווי ה[[אלפבית לטיני]] עם ה[[סימן דיאקריטי|סימנים הדיאקריטיים]], ה[[אלפבית יווני|אלפבית היווני]], ה[[אלפבית קירילי|אלפבית הקירילי]], ה[[קופטית]], ה[[ארמנית]], ה[[אלפבית עברי|אלפבית העברי]] וה[[אלפבית ערבי|אלפבית הערבי]]. שאר התווים במשטח הרב-לשוני הבסיסי (65,536 התווים הראשונים) משתמשים בשלושה בתים, ושאר התווים הנתמכים ביוניקוד משתמשים בארבעה בתים לקידוד. ככל ש-UTF-8 צורך יותר בתים לקידוד התו, אנו שמים לב שמדובר בתו ששכיחותו בטקסטים באופן כללי נמוכה יותר. התווים שאינם במשטח הרב-לשוני הבסיסי הם תווים שכמעט ולא, או כלל לא, היו קידודים שתמכו בהם קודם לכן והשימוש בהם הוא מזערי (מדובר בתווים מוזיקליים, סימנים מתמטיים ואותיות בשפות היסטוריות). טקסט שנכתב כולו באנגלית יתפוס את אותה כמות המקום בזיכרון כפי שהיה תופס לו קודד בשיטות הקידוד הישנות, וטקסט שנכתב בשפה שכיחה, שאינה אנגלית, יתפוס עד פי שניים מהמקום שהיה תופס לו קודד בשיטות הישנות. טקסט המשלב בתוכו מספר שפות שכיחות יתפוס כמות מקום זהה לטקסט הכתוב רק בשפה אחת שכיחה, אך לא ניתן להשוות לכמות הזיכרון שהיה תופס לו היה נכתב בשיטות הקידוד הישנות, משום שאותן שיטות כלל לא אפשרו הצגה של מספר שפות (שאחת מהן אינה אנגלית) באותו הטקסט.
 
== בעיית הצורות הארוכות ==