首页
/
每日頭條
/
科技
/
注釋過的vcf文件怎麼分析
注釋過的vcf文件怎麼分析
更新时间:2025-12-06 11:21:59

需要需要生成vcf 聯系人通訊錄,想到最快的是C# 做桌面應用程序,搜索了一下發現 contacts.vcf 文件其實就是文本,可以用記事本打開,格式如下

BEGIN:VCARD VERSION:2.1 N;CHARSET=UTF-8;Encoding=QUOTED-PRINTABLE:Ben TEL;CELL:123546 END:VCARD

如果是多個就一直這樣排列下去;

public static void CreateCard(string name,string phoneNumber,bool isUtf8Encode) { String fileName = string.Format(@"D:/{0}_{1}.vcf", name, isUtf8Encode ? "Android":"windows"); FileStream fs = new FileStream(fileName, FileMode.Create); StreamWriter sw = new StreamWriter(fs); sw.WriteLine("BEGIN:VCARD"); sw.WriteLine("VERSION:2.1"); sw.WriteLine("N;charSET=UTF-8;ENCODING=QUOTED-PRINTABLE:" EncodeQuotedPrintable(name, isUtf8Encode)); sw.WriteLine("TEL;CELL:" phoneNumber); sw.WriteLine("END:VCARD"); sw.Flush(); sw.Close(); fs.Close(); ; }

Quoted-Printable編碼定義,其實很簡單,就是将要編碼的文字轉換成byte字節流,然後使用十六進制的char型和“=”聯合表達出來,如=0C表示12。下面提供編碼及解碼的方式:

public static string EncodeQuotedPrintable(string value,bool isUtf8Encode) { if (string.IsNullOrEmpty(value)) return value; StringBuilder builder = new StringBuilder(); byte[] bytes = isUtf8Encode? Encoding.UTF8.GetBytes(value): Encoding.Default.GetBytes(value); foreach (byte v in bytes) { // The following are not required to be encoded: // - Tab (ascii 9) // - Space (ASCII 32) // - Characters 33 to 126, except for the equal sign (61). if ((v == 9) || ((v >= 32) && (v <= 60)) || ((v >= 62) && (v <= 126))) { builder.Append(Convert.ToChar(v)); } else { builder.Append('='); builder.Append(v.ToString("X2")); } } char lastChar = builder[builder.Length - 1]; if (char.IsWhiteSpace(lastChar)) { builder.Remove(builder.Length - 1, 1); builder.Append('='); builder.Append(((int)lastChar).ToString("X2")); } return builder.ToString(); } public static string DecodeQuotedPrintable(string input, string charSet) { Encoding enc; try { enc = Encoding.GetEncoding(charSet); } catch { enc = new UTF8Encoding(); } var occurences = new Regex(@"(=[0-9A-Z]{2}){1,}", RegexOptions.Multiline); var matches = occurences.Matches(input); foreach (Match match in matches) { try { byte[] b = new byte[match.Groups[0].Value.Length / 3]; for (int i = 0; i < match.Groups[0].Value.Length / 3; i ) { b[i] = byte.Parse(match.Groups[0].Value.Substring(i * 3 1, 2), System.Globalization.NumberStyles.AllowHexSpecifier); } char[] hexChar = enc.GetChars(b); input = input.Replace(match.Groups[0].Value, new String(hexChar)); } catch {; } } input = input.Replace("?=", "").Replace("\r\n", ""); return input; }

由于outlook 和Android 的解碼方式不同,所以在編碼的時候也需要注意,Android使用的是Utf-8, 而outlook 使用的是ascii,所以這裡需要注意; utf8占用3個字節,ascii 占用兩個字節;

下面是通過UTF-8生成出來 的

BEGIN:VCARD VERSION:2.1 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E5=B0=8F=E6=9B=BE TEL;CELL:13912341234 END:VCARD

下面是通過default (ASCII)生成出來 的

BEGIN:VCARD VERSION:2.1 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=D0=A1=D4=F8 TEL;CELL:13912341234 END:VCARD

注釋過的vcf文件怎麼分析(C生成vcf文件源代碼)1

完整源代碼見CSDN 搜索 C# 生成VCF demo源代碼,支持Android,outlook QuotedPrintable 中文編碼

或者私信給我

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
筆記本電池的使用
筆記本電池的使用
怎樣用好筆記本的電池,如何延長其使用時間和使用的壽命等問題,無疑是困擾在廣大筆記本電腦用戶心頭的一個難題。以下是筆記本電池使用的幾點建議:【1】激活新電池在新購機時筆記電池應帶有一定的電量。此時,您應該先不使用外接電源,把電池裡的餘電用盡,直至關機,然後再用外接電源充電。充電時間需要6-7個小時左右...
2025-12-06
中央空調機分為幾類
中央空調機分為幾類
中央空調系統由冷熱源系統和空氣調節系統組成。制冷系統為空氣調節系統提供所需冷量,用以抵消室内環境的冷負荷;制熱系統為空氣調節系統提供用以抵消室内環境熱負荷的熱量。制冷系統是中央空調系統至關重要的部分,其采用種類、運行方式、結構形式等直接影響了中央空調系統在運行中的經濟性、高效性、合理性。按構造不同,...
2025-12-06
幹毛巾可讓冰箱清潔
幹毛巾可讓冰箱清潔
冰箱用久了會弄髒,不及時擦拭就易滋生病菌。因許多媽媽又上班又帶孩子,一忙起來很難對冰箱進行及時清理。方法是在冰箱的架子上分别鋪上毛巾,當毛巾沾上污垢之後就立即取出來洗滌曬幹。曬幹以後再鋪上,這樣就能保持冰箱内清潔且省事。
2025-12-06
挂燙機好用嗎
挂燙機好用嗎
挂燙機是很多人比較關心的問題,主要是挂式的熨鬥也就是挂着晾衣服和布料的機器,主要是内部産生的一些熱水蒸汽不斷的接觸,達到軟化成軟化衣服和布料纖維組織的目的,是衣服和布料運行的起來比較簡單,它與平闆的熨鬥相比的更加的方便快捷,而且全程有效地保護布料。很多人對于它的使用方面很擔心。挂燙機好用嗎它主要是用...
2025-12-06
VCD機常見故障的處理
VCD機常見故障的處理
1、開機後不能正常播放①、碟片髒。可用VCD清潔劑或用軟棉布沾純淨蒸餾水擦拭清洗碟片,幹淨後再試用。②、機内碟片重疊、卡住或滑出槽外。應打開機殼擺正碟片或取出多餘碟片。③、環境溫度低而失常,可以邊加熱邊試機,待正常時立即停止加熱。④、激光頭上有異物。可用VCD機專用清潔劑清潔,或打開機殼,用軟棉布沾...
2025-12-06
Copyright 2023-2025 - www.tftnews.com All Rights Reserved