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

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

הגדרה
-----

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

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

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

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

### תו בקרה

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

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

דוגמאות
-------

### JavaScript

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

* `\'` גרש בודד
* `\"` מירכאות כפולות
* `\\` לוכסן שמאלי
* `\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.

מקש 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

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

|  |  |
| --- | --- |
|  | 
```
rm * # delete all files in the current directory

rm \\* # delete the file named \*

```
 |

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

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

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

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

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

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

```

### Windows PowerShell

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

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

```
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.