איפה - בקוד המצורף (json2csv)- צריך להמיר לutf8?
-
@chagold זה בדיוק הפוך.
הקובץ הוא בutf8 וזה מצויין,
אלא שתוכנת אקסל בברירת מחדל לא מצפה לקובץ UTF-8 אלא לANSI כלומר Windows-1255.
כיון שהבעיה באקסל, זה מאה אחוז תקין, רק צריך לפתוח את זה באקסל עם קידוד. הכי פשוט זה בכרטסת נתונים, לייבא קובץ טקסט, שמה בברירת מחדל נדמה לי זה UTF8. -
מצאתי כאן שבאמת שטעיתי, אקסל מכבד UTF-8 בתנאי שיש בהתחלה כותרת BOM (לא מבין מה כתבתי, ראה פה https://en.wikipedia.org/wiki/Byte_order_mark).
אז הנה הקוד מתוקן (שורה 21):var csvFile = '\ufeff';
-
למי שתוהה, תו ה-BOM (ובשמה המלא BYTE ORDER MARK) נועד במקור לציין את סדר הבתים שהקובץ משתמש בו כדי להציג מספרים בני 16 או 32 ביטים.
בקידודים UTF-16 ו-UTF-32 אבני הבסיס הם מספרים בני 16 ו-32 ביטים לכן התו הזה נחוץ (בהעדר מידע מבחוץ) בשביל לזהות את סדר הבתים בו הקובץ משתמש.
בנוסף, התו שימושי כדי להבחין בין UTF-16 ל-UTF-32 כי ה-BOM מיוצג בצורה שונה בשני הקידודים
בקידוד UTF-8, אבן הבסיס הוא מספר בן 8 ביטים, שכל המעבדים מייצגים בצורה זהה, לכן אין צורך ב-BOM עבור זיהוי סדר הבתים, (וגם אפשר בקלות לזהות אם קובץ הוא UTF-8 תקין בלי צורך להשתמש ב-BOM), אבל זה יכול להשתמש כסוג של רמז שמדובר (בסבירות גבוה) בקובץ יוניקוד ולא ascii או ansi או משהו אחר
מייקרוסופט אימצו לעצמם נוהג שלפיה כל קובץ בלי BOM מזוהה כ-ANSI, ועם BOM זה מזוהה כיוניקוד
לפעמים כשאין צורך ב-BOM זה יכול גם להזיק אם התוכנה מצפה לקבל ASCII ובלי ה-BOM בטקסט פשוט הרי UTF-8 הוא גם ASCII תקין, וה-BOM מקלקל
במקרה של קובץ CSV עבור אקסל שכולל בתוכו תווים מחוץ לטווח ה-ASCII ה-BOM רק עוזר
הנ"ל מה שהבנתי מתוך הכתבה בויקיפדיה ש@dovid ציין, ומתוך ה-FAQ הזה באתר הבית של תקן יוניקוד