ארכיון יומי: 25 ספטמבר, 2010

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 אז הוא מזהה שהוא כבר קיים, ופשוט מסמן שהוא קיים, ואם אני אומר לו להסיר את הבתים, אז הוא עושה עבודה מצויינת בזה.