שיתוף: איך לפענח את השם בעברית בקובץ VCard (*.vcf)
-
קובץ VCard הוא קובץ של אנשי קשר (בעיקר בטלפונים)
ומשום מה תמיד השם בעברית הגיע מקודד בצורה שלא הבנתי איך לשחרר, וגם רוב החבילות שיודעות לקרוא את הקובץ הזה לא הצליחו.
זה הקידוד (המילה דוגמא):=D7=93=D7=95=D7=92=D7=9E=D7=90
לקח לי הרבה זמן להבין מה זה הקידוד הזה
אז אחרי שיטוט וחיפוש בגוגל (לא יודע איך זה נעלם מעיני עד היום), צריך להחליף את הסימן שווה (=) באחוזים (%), ואז יוצא לנו בעצם טקסט UrlEncoded, ומשם הדרך להמרה מאד פשוטה.
קוד C# לדוגמא:
HttpUtility.UrlDecode((vcard.FirstName + " " + vcard.MiddleName + " " + vcard.LastName).Replace("=", "%"))
קוד C# מלא של המרת קובץ vcf לרשימה: (השתמשתי בחבילה של MixERP.Net.VCards)
var path = @"C:\Users\ClickOne\Dropbox\00002.vcf"; IEnumerable<VCard> vcards = MixERP.Net.VCards.Deserializer.Deserialize(path); vcards.Take(100).Select(v => new { name = HttpUtility.UrlDecode((v.FirstName + " " + v.MiddleName + " " + v.LastName).Replace("=", "%")) }).Dump();
אני מניח את זה כאן, למקרה שעוד מישהו נתקל/צריך את זה.
עריכה: שכחתי את הדבר הכי חשוב, מקור
-
@clickone הדרך שהבאת ממש אלגנטית! במקום להתחיל לכתוב את הקוד של המרת 64 לטקסט.
החבילה הזו דפוקה שהיא לא עושה את זה, כי זה ממש התפקיד שלה.
הקידוד לא חייב להיות ככה, הוא מוגדר בשורה הזו:N;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:;=
שנמצאת מעל כל איש קשר.
QUOTED-PRINTABLE זה שם הקידוד. -
@clickone כתב בשיתוף: איך לפענח את השם בעברית בקובץ VCard (*.vcf):
קובץ VCard הוא קובץ של אנשי קשר (בעיקר בטלפונים)
ומשום מה תמיד השם בעברית הגיע מקודד בצורה שלא הבנתי איך לשחרר, וגם רוב החבילות שיודעות לקרוא את הקובץ הזה לא הצליחו.
זה הקידוד (המילה דוגמא):=D7=93=D7=95=D7=92=D7=9E=D7=90
לקח לי הרבה זמן להבין מה זה הקידוד הזה
אז אחרי שיטוט וחיפוש בגוגל (לא יודע איך זה נעלם מעיני עד היום), צריך להחליף את הסימן שווה (=) באחוזים (%), ואז יוצא לנו בעצם טקסט UrlEncoded, ומשם הדרך להמרה מאד פשוטה.
קוד C# לדוגמא:
HttpUtility.UrlDecode((vcard.FirstName + " " + vcard.MiddleName + " " + vcard.LastName).Replace("=", "%"))
קוד C# מלא של המרת קובץ vcf לרשימה: (השתמשתי בחבילה של MixERP.Net.VCards)
var path = @"C:\Users\ClickOne\Dropbox\00002.vcf"; IEnumerable<VCard> vcards = MixERP.Net.VCards.Deserializer.Deserialize(path); vcards.Take(100).Select(v => new { name = HttpUtility.UrlDecode((v.FirstName + " " + v.MiddleName + " " + v.LastName).Replace("=", "%")) }).Dump();
אני מניח את זה כאן, למקרה שעוד מישהו נתקל/צריך את זה.
עריכה: שכחתי את הדבר הכי חשוב, מקור
בעבר מישהו העלה אפליקציה שעושה את זה בחצי דקה וממירה לקובת אקסל [זה היה כאן או במתמחים טופ]
-
@גאון היקר,
הפוסט שלי נכתב בקטגוריית "תכנות", זו קטגוריה שמיועדת למתכנתים,
הפוסט שלי כיוון למתכנתים שירצו בעתיד לנתח כזה קובץ ישירות מסיבותהם שלהם, ולא להזדקק לתוכנה באמצע שתמיר את זה לאקסל.אכן אם הייתי סתם מעלה קוד / קובץ שראה איך לנתח את הקובץ הזה בגומלין לדוגמא, זה היה מיותר וההערה הצודקת שלך היתה במקומה.