Byte Marks

BOM הוא קיצור ל Byte Order Mark, אשר מתלבש בד"כ על קבצי טקסט בהתחלה שלהם, ואם לא יודעים לטפל בו הוא עושה שמות במה שעשינו, אבל כאשר יודעים לטפל בו, הוא מסביר לנו מה הקידוד של הטקסט בקובץ והסדר שלו, במידה ויש הבדל בין אינדיאנים גדולים וקטנים.

אז למה הוא עושה שמות במה שעשינו ? ובכן זה אוסף של בין 2 ל4 תווים אשר בייחד מסבירים מה הקידוד, אם זה UTF-8, UTF-16, UTF32 וכו'. כאשר UTF-16 ו32 יכולים להיות ב2 סוגי אינדיאנים והסימני בתים בעצם מסבירים מול מה אנחנו מתמודדים. כאשר יש צורך לעבוד עם UTF-7 (לא באמת חלק מהחבורה של UTF-8, אלא אח חורג), אז ההתנהגות של BOM קצת שונה והוא יכול להגיע עם עוד בית נוסף (עזבו, אל תכנסו לכאב ראש הזה של UTF-7, אלא אם אין ברירה).

כאשר סימני הבתים קיימים עבורינו בקובץ, והתוכנה שמפרשת אינה יודעת להתמודד איתם ההתנהגות אינה צפויה בעליל. בייחוד אם הם ממוקמים במקומות לא מתאימים, כלומר אני בונה ממשק מבוסס ווב, אשר משלב בתוכו הרבה קבצי template שכל אחד מהם מכיל BOM, אז סביר להניח שהתוכן של ה BOM יכנס אלינו לאמצע הקובץ איפשהו, ואז הדפדפן בצדק לא ידע מה לעשות עם הבתים האלו במיקום הזה, וזה ישפיע לגמרי על העיצוב של הממשק שלנו (בד"כ כדוגמת ירידת שורה, אבל לא מחייב).

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

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

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

4 מחשבות על “Byte Marks

  1. ארתיום

    לדעתי, BOM ב־UTF-8 צריך להיות deprecated. זאת שטות גדולה ביותר שאין לה זכות קיום.

    רק בגלל שבחלונות יש לנוהל – עם קובץ מתחיל עם BOM אז הקידוד שלו הוא UTF-8/UTF-16LE/UTF-16BE אחרת הוא במקודד ב־ANSI Codepage. וכך הרבה כלים בחלונות. בגלל זה רבים סובלים המשטות הזו.

    לפי דעתי, אסור להשתמש ב־BOM בקידוד UTF-8 (כי הוא פשוט חסר משמעות שם)

  2. ik_5 מאת

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

  3. Sro

    אם כבר מדברים על BOM ב-UTF8, אז כשמתכנתים ב-PHP אין אסור לשים UTF8 (קידודים אחרים לא בדקתי) עם BOM, המפענח של PHP קורא אותו כטקסט רגיל, וזה דופק שינוי סשנים (כיוון ההידרים נשלחים מידית עם התווים הראשונים).
    זה שרף לי חתיכת זמן, עד שעליתי על הבעיה עם הסשנים.

להשאיר תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s