תו מילוט

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

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

ייתכן שלתו מילוט לא תהיה משמעות בפני עצמו, כך שכל רצפי המילוט שעושים בו שימוש יכילו שני תווים או יותר.

תווי מילוט הם חלק מהתחביר של שפות תכנות רבות, פורמטים של נתונים ופרוטוקולי תקשורת. עבור אלפבית נתון, המטרה של תו מילוט היא להתחיל רצפי תווים (שנקראים רצפי מילוט), שיש לפרש אותם בצורה שונה מאותם תווים המופיעים ללא הפתיח של תו המילוט.

הפונקציות של רצפי מילוט כוללות:

  • קידוד ישות תחבירית, כגון פקודות מכשיר או נתונים מיוחדים, שלא ניתן לייצג ישירות על ידי האלפבית.
  • ייצוג תווים, המכונה ציטוט תווים, שלא ניתן להקליד בהקשר הנוכחי, או שתהיה להם פרשנות לא רצויה. במקרה זה, רצף מילוט הוא דיגרף המורכב מתו המילוט עצמו ומהתו המצוטט.

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

בשפות תכנות רבות, תו מילוט יוצר גם כמה רצפי מילוט המכונים תווי בקרה. לדוגמה, למעבר שורה יש רצף מילוט של \n.

JavaScript משתמשת ב-\ (לוכסן שמאלי) כתו מילוט עבור:[1][2]

  • \' גרש בודד
  • \" מירכאות כפולות
  • \\ לוכסן שמאלי
  • \n מעבר שורה
  • \r סיום שורה
  • \t טאב
  • \b מקש Backspace
  • \f סיום עמוד
  • \v טאב אנכי (אינטרנט אקספלורר 9 ומטה מתייחס ל-'\v כאל 'v במקום טאב אנכי ('\x0B). אם נדרשת תאימות לדפדפנים אלו, יש להשתמש ב-\x0B במקום ב-\v.)
  • \0 תו ה-Null (U+0000 NULL) (בתנאי שהתו הבא אינו ספרה עשרונית, במקרה כזה המחרוזת תפורש כמספר בבסיס אוקטלי)
  • \xFF תו המיוצג על ידי הבית ההקסדצימלי "FF"

יש לשים לב ש-\v ו-\0 אינם קבילים במחרוזות JSON.

קוד לדוגמה:

console.log("Using \\n \nWill shift the characters after \\n one row down")
console.log("Using \\t \twill shift the characters after \\t one tab length to the right")
console.log("Using \\r \rWill imitate a carriage return, which means shifting to the start of the row") // can be used to clear the screen on some terminals. Windows uses \r\n instead of \n alone

תו המילוט ב-ASCII

[עריכת קוד מקור | עריכה]

תו המילוט ב-ASCII (אוקטלי: \033, הקסדצימלי: \x1B, או ^[, או, בייצוג עשרוני, 27) משמש בהתקני פלט רבים כדי להתחיל סדרה של תווים הנקראת רצף בקרה או רצף מילוט. בדרך כלל, תו המילוט נשלח ראשון ברצף כזה כדי להתריע בפני המכשיר כי התווים הבאים אמורים להתפרש כרצף בקרה ולא כתווים רגילים, לאחר מכן תו אחד או יותר יגיעו כדי לציין פעולה מסוימת, ולאחר מכן המכשיר יחזור לפרש תווים כרגיל. לדוגמה, הרצף של ^[, ואחריו התווים הניתנים להדפסה [2;10H, יגרום למסוף DEC VT102 להזיז את הסמן שלו לתא ה-10 של השורה השנייה של המסך. זה פותח מאוחר יותר לקודי מילוט של ANSI המפורטים בתקן ANSI X3.64. תו המילוט גם מתחיל כל רצף פקודות בשפת הפקודה של Hewlett Packard Printer.

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

מקש Esc נמצא בדרך כלל במקלדות PC רגילות. עם זאת, זה בדרך כלל נעדר ממקלדות עבור מחשבי כף יד והתקנים אחרים שאינם מיועדים בעיקר לתקשורת ASCII. סדרת DEC VT220 הייתה אחת המקלדות הפופולריות היחידות שלא היה להן מקש Esc ייעודי. בממשקי משתמש של שנות ה-70–1980 לא היה נדיר להשתמש במקש זה כתו מילוט, אך במחשבים שולחניים מודרניים, השימוש הזה דעך. לפעמים המקש זוהה עם AltMode (מצב חלופי). אפילו ללא מקש ייעודי, ניתן להפיק את קוד תו המילוט על ידי הקלדת [ תוך לחיצה ממושכת בו-זמנית על מקשCtrl.

תכנות ופורמטים של נתונים

[עריכת קוד מקור | עריכה]

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

C, C++, Java ו-Ruby כולם מאפשרים את אותם שני סגנונות מילוט עם לוכסן שמאלי. שפת פוסטסקריפט ו- Rich Text Format של מיקרוסופט משתמשים גם הם בלוכסן שמאלי. הקידוד הניתן להדפסה במירכאות משתמש בסימן השווה כתו מילוט.

כתובות URL ו-URI משתמשים ב-% (סימן האחוז) כדי לצטט תווים שאינם ASCII, כולל תווים בעברית. זה נקרא קידוד URL. כך הכתובת של עמוד זה הופכת מ: https://he.wikipedia.org/wiki/תו_מילוט

למחרוזת הבאה:

https://he.wikipedia.org/wiki/%D7%AA%D7%95_%D7%9E%D7%99%D7%9C%D7%95%D7%98

התו אמפרסנד (&) עשוי להיחשב כתו מילוט ב-SGML ובפורמטים נגזרים כגון HTML ו-XML.

שפות תכנות מסוימות מספקות דרכים נוספות לייצוג תווים מיוחדים במחרוזות, מבלי לדרוש תו מילוט.

פרוטוקולי תקשורת

[עריכת קוד מקור | עריכה]

פרוטוקול Point-to-Point (PPP) משתמש בתו 0x7D (\175, או ASCII: }) כתו מילוט. יש לבצע XOR על התו מיד לאחר מכן עם 0x20 לפני שיועבר לפרוטוקול ברמה גבוהה יותר. זה מיושם הן על 0x7D עצמו והן על תו הבקרה 0x7E (המשמש ב-PPP כדי לסמן את ההתחלה והסוף של מסגרת) כאשר יש להעביר את התווים הללו על ידי פרוטוקול ברמה גבוהה יותר המובלע על ידי PPP, כמו גם תווים אחרים שנקבעו, כאשר הקישור נוצר. כלומר, כאשר פרוטוקול ברמה גבוהה יותר רוצה לשדר 0x7D, הוא מועבר כרצף 0x7D 0x5D, ו-0 0x7E מועבר כ-0x7D 0x5E.

ב-Bourne shell (sh), תווי הכוכבית (*) וסימן השאלה (?) הם תווים כלליים המורחבים באמצעות גלוב. ללא תו מילוט קודם, * יתרחב לשמות של כל הקבצים בספריית העבודה שאינם מתחילים בנקודה אם ורק אם יש קבצים כאלה, אחרת * נשאר לא מורחב. אז כדי להתייחס לקובץ ששמו הוא התו כוכבית עצמו - "*", יש לומר למעטפת הפקודה לא לפרש אותו בצורה זו, על ידי הקדמתו בלוכסן שמאלי (\). זה משנה את הפרשנות של הכוכבית (*). להמחשה:

rm *  # delete all files in the current directory

rm \*  # delete the file named *

שורת הפקודה של Windows

[עריכת קוד מקור | עריכה]

המפרש בשורת הפקודה של Windows משתמש בסימן קרט ^ כדי להימלט מתווים שמורים בעלי משמעויות מיוחדות (במיוחד: &, |, (, ), <, >, ^ ). [4] מפרש שורת הפקודה של DOS, אף על פי שיש לו תחביר דומה, אינו תומך בכך.

לדוגמה, בשורת הפקודה של Windows, הדבר יגרום לשגיאת תחביר.

C:\>echo <hello world>
The syntax of the command is incorrect.

ואילו זה יוציא את המחרוזת: <hello world>

C:\>echo ^<hello world^>
<hello world>

ב-Windows, הלוכסן השמאלי משמש כמפריד נתיב; לכן, בדרך כלל לא ניתן להשתמש בו כתו מילוט. PowerShell משתמש במקום זאת בסימן הטעמה משני[5] ( ` ).

לדוגמה, הפקודה הבאה:

PS C:\> echo "`tFirst line`nNew line"
    First line
New line
  • Quoted-printable, המקודד נתונים של 8 סיביות לנתונים של 7 סיביות באורך שורה מוגבל, משתמש בסימן השוויון (=) בתור תו מילוט.

הערות שוליים

[עריכת קוד מקור | עריכה]
  1. ^ "JavaScript character escape sequences · Mathias Bynens". Mathiasbynens.be. נבדק ב-2014-06-30.
  2. ^ "Special Characters (JavaScript)". Msdn.microsoft.com. 2014-06-20. נבדק ב-2014-06-30.
  3. ^ Bemer, Bob. "How Bob Bemer Invented the ESCAPE Sequence and Key". www.bobbemer.com. אורכב מ-המקור ב-4 בינואר 2018. נבדק ב-22 במרץ 2018. {{cite web}}: (עזרה)
  4. ^ Tim Hill (1998). "The Windows NT Command Shell". MacMillan Technical Publishing. נבדק ב-2010-01-13.
  5. ^ "about_Escape_Characters". Msdn.microsoft.com. 2014-05-08. אורכב מ-המקור ב-2016-11-25. נבדק ב-2016-11-24.