ASCII ויוניקוד: מהם ולמה הם משמשים

מחשב מבין רק מספרים, ולכן כל אות שאתם רואים במסך היא קוד. ASCII הייתה טבלת הקודים הראשונה שהפכה לתקן, ויוניקוד היא זו שבה משתמשים היום כדי לכתוב בכל שפה. כאן תראו איך הם פועלים, אילו קודים כדאי להכיר, למה לפעמים מופיעים סימנים משונים במקום אותיות עם סימנים ואיך לעיין בכול בטבלה.

עודכן:

מהו קידוד תווים

קידוד הוא הסכם: «המספר 65 מייצג את האות A». כשכותבים טקסט, התוכנה שומרת את המספרים האלה; כשאדם אחר פותח אותו, התוכנה שלו מתרגמת אותם בחזרה לאותיות לפי אותו הסכם. אם שני הצדדים לא משתמשים באותה טבלה, הטקסט יוצא שבור.

צריך להבחין בין שני רעיונות. האחד הוא קבוצת התווים, הרשימה של איזה מספר מתאים לאיזה סימן. השני הוא איך המספרים האלה נשמרים בבתים. ב-ASCII השניים חופפים באופן טריוויאלי; ביוניקוד לא, ושם נכנס UTF-8.

ASCII: 128 תווים של 7 ביטים

ASCII (ראשי תיבות של American Standard Code for Information Interchange) תוקנה בשנות ה-60. היא משתמשת ב-7 ביטים, כלומר 2 בחזקת 7 = 128 קודים, מ-0 עד 127. מתוכם 33 הם תווי בקרה (מ-0 עד 31 ו-127) ו-95 ניתנים להדפסה (מ-32 עד 126, כולל הרווח).

היא לא כוללת אותיות עם סימנים, לא את ñ ולא את סימן האירו: היא תוכננה לאנגלית. זה מסביר למה אחר כך נדרשו טבלאות אחרות.

הקודים שתפגשו הכי הרבה. הרווח (32) נחשב ניתן להדפסה אף שאינו נראה.
תו בקרהעשרוניהקסדצימליבינארי (7 ביטים)למה משמש
ריק (NUL)0000000000מסמן סוף מחרוזת בכמה שפות
טאב אופקי (TAB)9090001001קופץ לעצירת הטאב הבאה
ירידת שורה (LF)100A0001010יורד לשורה הבאה
החזרת סמן (CR)130D0001101חוזר לתחילת השורה
בריחה (ESC)271B0011011פותח רצפי בקרה
רווח32200100000התו הראשון הניתן להדפסה
מחיקה (DEL)1277F1111111מוחק את התו

קשרים שכדאי לזכור

הטבלה לא מסודרת באקראי. עם כמה חוקיות אפשר לקרוא קודים מהזיכרון.

סוף שורה: LF, CR ו-CRLF

ירידת שורה נראית דבר פשוט, אבל היא נכתבת אחרת בכל מערכת. יוניקס, לינוקס ו-macOS משתמשות בתו אחד, LF (10). ווינדוס משתמשת בשניים ברצף, CR ו-LF (13 ו-10), הידועים כ-CRLF. לטלפרינטרים הישנים היו נחוצות שתי פקודות שונות: להחזיר את המרכבה לתחילת השורה ולקדם את הנייר שורה אחת.

ההבדל הזה הוא הסיבה לקבצים שנראים כולם בשורה אחת בעורך בסיסי, או עם סימן מוזר בסוף כל שורה. אם אתם רוצים לדעת איזה קוד יש לכל אחד, כתבו LF או CR בחיפוש של טבלת ASCII.

«ASCII מורחב» אינו תקן

מכיוון שלבייט יש 8 ביטים ו-ASCII משתמשת רק ב-7, נשארו 128 קודים פנויים (מ-128 עד 255) וכל יצרן ואזור מילא אותם בדרכו. זה מכונה «ASCII מורחב», אבל אין טבלה אחת: יש רבות, שנקראות דפי קוד. שניים מהמוכרים הם Latin-1 (ISO-8859-1), שבו é הוא הקוד 233, ו-Windows-1252, דומה אבל עם הבדלים בקודים 128 עד 159 (שם נמצא, למשל, האירו).

הבעיה היא שהקוד 233 מייצג «é» בטבלה אחת ודבר אחר באחרת. טקסט שנכתב עם טבלה אחת ונקרא עם אחרת הציג ג׳יבריש. יוניקוד נולדה כדי לסיים את הבלגן הזה.

יוניקוד ו-UTF-8

יוניקוד מקצה מספר ייחודי, שנקרא נקודת קוד, לכל תו של כמעט כל מערכות הכתב בעולם, ובנוסף סימנים ואמוג׳י. כיום יש בה יותר מ-150,000 תווים. היא נכתבת עם הקידומת U+ ובהקסדצימלי: «A» היא U+0041, «ñ» היא U+00F1, האירו הוא U+20AC ואמוג׳י הפרצוף המחייך הוא U+1F600. 128 נקודות הקוד הראשונות הן בדיוק אלה של ASCII.

UTF-8 היא הדרך הנפוצה ביותר לשמור את המספרים האלה בבתים, והיא משתמשת בין 1 ל-4 לפי התו. 128 התווים של ASCII תופסים בייט אחד זהה לזה שתמיד, ולכן טקסט ASCII הוא גם טקסט UTF-8 תקין. השאר תופס יותר בתים.

ככל שמתרחקים מ-ASCII, התו תופס יותר בתים.
תונקודת קודבתים ב-UTF-8בתים (הקסדצימלי)
AU+0041141
éU+00E92C3 A9
ñU+00F12C3 B1
€U+20AC3E2 82 AC
😀U+1F6004F0 9F 98 80

למה מופיע «Ã±» במקום «ñ»

זו הטעות הנפוצה ביותר ויש לה הסבר מדויק. ñ ב-UTF-8 היא שני בתים: C3 ו-B1. אם תוכנה סבורה שהטקסט הוא ב-Latin-1, היא קוראת כל בייט כתו: C3 הוא «Ã» ו-B1 הוא «±». התוצאה: «Ã±». אותו דבר קורה עם «é», שנראית כמו «Ã©», ועם «café», שמופיעה כ«café».

הפתרון כמעט תמיד הוא להורות לתוכנה לפתוח את הקובץ כ-UTF-8 (בעורך טקסט או בהגדרות הייבוא של גיליון אלקטרוני). כשזה קורה בכיוון ההפוך, טקסט ב-Latin-1 שנקרא כ-UTF-8, מופיעים בדרך כלל מעוינים עם סימן שאלה, כי הבתים הבודדים האלה לא יוצרים רצפי UTF-8 תקינים.

איך משתמשים בטבלת ASCII ובממיר

הכלי «טבלת ASCII» מציג את 128 התווים עם הקוד שלהם בעשרוני, בהקסדצימלי, באוקטלי ובבינארי, ואת שם תווי הבקרה.

  1. הקלידו בחיפוש תו, קוד או שם של תו בקרה (למשל A, 65, 41 או LF) כדי למצוא את השורה שלו.
  2. השתמשו בכפתורי הסינון (בקרה, ספרות, אותיות גדולות, אותיות קטנות, סימנים) כדי לראות רק קבוצה אחת.
  3. כדי להמיר, כתבו טקסט ב«טקסט» ובחרו את הפורמט (עשרוני, הקסדצימלי, אוקטלי או בינרי): למטה מופיעים הקודים. «Hola» נותן 72 111 108 97 בעשרוני ו-48 6F 6C 61 בהקסדצימלי.
  4. אפשר גם בכיוון ההפוך: הדביקו קודים מופרדים ברווחים או בפסיקים ב«קודים» והטקסט נבנה. בהקסדצימלי מתקבלות גם קידומות כמו 0x41.

אם בטקסט יש תווים שאינם ASCII, כמו האות א, הכלי מתריע ומציג את קוד היוניקוד שלהם. כדי לראות את הבתים האמיתיים ב-UTF-8 השתמשו ב«טקסט לבינארי»: האות א נותנת 11010111 10010000, שני בתים של 8 ביטים. המגבלות: הטבלה מציגה רק ASCII תקנית ולא מורחבת, והכול מחושב בדפדפן שלכם בלי לשלוח את הטקסט לאף שרת.

שאלות נפוצות

כמה תווים יש ב-ASCII?

128, עם קודים מ-0 עד 127 ו-7 ביטים לכל אחד. מתוכם 33 הם תווי בקרה ו-95 ניתנים להדפסה, כולל הרווח.

מהו קוד ה-ASCII של האות A ושל a?

«A» היא 65 (41 בהקסדצימלי, 01000001 בבינארי) ו-«a» היא 97 (61 בהקסדצימלי, 01100001 בבינארי). ההפרש ביניהן תמיד 32.

מה ההבדל בין ASCII ליוניקוד?

ל-ASCII יש 128 תווים שנועדו לאנגלית. ליוניקוד יש יותר מ-150,000, מכמעט כל השפות וגם אמוג׳י, ו-128 הראשונים שלה זהים לאלה של ASCII.

מהו UTF-8?

זו הדרך הנפוצה ביותר לשמור טקסט יוניקוד בבתים. היא משתמשת ב-1 עד 4 בתים לתו: תווי ASCII תופסים אחד, אות בעברית תופסת שניים ואמוג׳י ארבעה.

למה הטקסט שלי מציג «Ã±» או «Ã©»?

כי טקסט ששמור ב-UTF-8 נקרא כ-Latin-1. פתחו את הקובץ תוך ציון קידוד UTF-8 וזה יסתדר.