קורה לא פעם, שאנחנו עובדים עם טקסט בקידודים שונים. לא מזמן יצא לי לשאול את עצמי למה יש קטעי קוד שמקודדים ב UTF-16.
לפני שנדבר על UTF8, UTF16 אנחנו צריכים להבין מה זה ASCII:
אז בקצרה, ASCII הוא קוד לייצוג תווים, קוד זה משמש להצגת אותיות האלפבית הלטיני הפשוט. הוא קידוד של 7 סיביות המכיל 128 תווים.
קוד ה-ASCII היה בעבר הבסיס לכל הטקסט הממוחשב, והדבר יצר התנגשויות בין מדינות בהן סימני טקסט שונים הולבשו על אותו קוד 7 ביט. בראשית ימי האינטרנט, לדוגמא, היו אתרים רבים בעברית מוצגים כג'יבריש לטיני, והיה צורך להעביר את מצב הקידוד של הדפדפן מלטינית או אנגלית לעברית.
עם השנים החליף סטנדרט ה-UTF8/16 את ה-ASCII.
לפני שנדבר על UTF8, UTF16 אנחנו צריכים להבין מה זה ASCII:
אז בקצרה, ASCII הוא קוד לייצוג תווים, קוד זה משמש להצגת אותיות האלפבית הלטיני הפשוט. הוא קידוד של 7 סיביות המכיל 128 תווים.
קוד ה-ASCII היה בעבר הבסיס לכל הטקסט הממוחשב, והדבר יצר התנגשויות בין מדינות בהן סימני טקסט שונים הולבשו על אותו קוד 7 ביט. בראשית ימי האינטרנט, לדוגמא, היו אתרים רבים בעברית מוצגים כג'יבריש לטיני, והיה צורך להעביר את מצב הקידוד של הדפדפן מלטינית או אנגלית לעברית.
עם השנים החליף סטנדרט ה-UTF8/16 את ה-ASCII.
אז אנחנו מבינים מה זה ASCII.
אז מתי נשתמש ב UTF8?
- UTF8 תואם ל ASCII. לכן אם יש לנו מערכת ישנה שהשתמשה בקידוד ASCII, נוכל להניח ש UTF8 יהיה תואם.
- מבחינת צריכת זיכרון UTF8 עדיף: הוא משתמש בבית אחד כיחידה הקטנה ביותר, ו UTF16 משתמש כשני בתים ליחידה הקטנה ביותר. אך שימו לב!! UTF16 גם יכול להשתמש ב 3 ו 4 בתים (באג נפוץ זה שמתכנתים נוטים לחשוב ש UTF16 משתמש רק בשני בתים).
- מתי UTF16 צורך פחות זכרון? כאשר ה ASCII לא דומיננטי. כאשר הטקסט מכיל אותיות יפניות, סיניות,קוריאניות, הודיות, תווי מוזיקה UTF16 משתמש בפחות בתים ( 2 בתים בהשוואה ש UTF8 יכול לצרוך 3 בתים או יותר בנ"ל)
- אם אנחנו צריכים להעביר מידע ברשת, נרצה לקודד ב UTF8, ככה לא נצטרך לדאוג לחיבור בתים שונים ליצירת אות בעת קבלת המידע. כל אות תהיה מורכבת מבית אחד (לרוב כמובן).
- יש הטוענים ששימוש בקידוד UTF16 טוב עבור עיבוד מידע בזכרון.
המלצתי היא להחליט על הקידוד הנכון רק לאחר שבוחנים את הטקסט שאנחנו הולכים לקודד, ומה אנחנו רוצים בדיוק לעשות עם הטקסט (עיבוד בזכרון, שליחה לשרות חיצוני, כתיבה לקובץ).