首页
/
每日頭條
/
科技
/
注釋過的vcf文件怎麼分析
注釋過的vcf文件怎麼分析
更新时间:2026-07-20 23:49:54

需要需要生成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
推荐阅读
iphone6plus和華為nova
iphone6plus和華為nova
前兩天寫了一篇名為《手機型号中的Pro、Ultra、Note、Mate都是啥意思?一篇文章講清楚》的文章,裡面介紹了Pro、Ultra、Note、Mate、Max、Mini、Mix、S、SE、X、C的含義,很多小夥伴感覺都很受用。同時呢,大...
2026-07-20
數字化辦公的市場
數字化辦公的市場
數字化辦公的市場?開欄語2015全球創交會暨第十屆歐洽會剛剛落下帷幕,而成都的創新創業如火如荼在成都,大量“創客”正站在“風口上”,迎來飛速發展期今日起,成都商報将聯合成都高新區,在海量成都創客中挖掘八位雙創典範,他們或是創業圈的“新貴”,...
2026-07-20
地下城與勇士手遊韓服幾點正式玩
地下城與勇士手遊韓服幾點正式玩
《地下城與勇士手遊》韓服的下載頁面我們可以看到有兩個不同的版本,對應的是:12和17兩個版本,玩家對于這兩個版本也是很好奇的,那麼有什麼不同點呢?為了解除大家的好奇心,接下來小編就給大家整理了《地下城與勇士手遊》韓服12和17版本區别點介紹...
2026-07-20
筆記本的擴展産品有哪些
筆記本的擴展産品有哪些
受平闆電腦的沖擊,傳統筆記本已經進入了必須轉變的時刻,而英特爾于2011年提出的超極本概念,就是這種趨勢的縮影。時至今日,超極本、超薄本、分體式設備,這些新興産品已經改變了傳統筆記本笨重呆闆的形态,從而開創了筆記本的“微時代”。微型化是怎麼...
2026-07-20
epc工程總承包管理及實例
epc工程總承包管理及實例
衆所周知,近20年來,我國建築行業經曆了一個快速發展蛻變的過程,建設工程項目日益向規模化、科技化方向發展,同時,工程項目風險也表現出建設周期長、資金投入大、管理流程複雜、難度大等特點。如何有效緩解和避免上述風險問題,一直是國家與行業内普遍關...
2026-07-20
Copyright 2023-2026 - www.tftnews.com All Rights Reserved