【问题标题】:Parsing a vCard (vcf) from its string value从字符串值解析 vCard (vcf)
【发布时间】:2014-03-04 21:41:24
【问题描述】:

我设法使用LumiSoft 创建了一个 vCard,然后获取它的字符串值

    LumiSoft.Net.Mime.vCard.vCard card = new vCard();
    Stream stream = new MemoryStream();
    card.ToStream(stream);
    stream.Position = 0;
    StreamReader reader = new StreamReader(stream);
    return reader.ReadToEnd();

以下是返回字符串的示例:

开始:VCARD 版本:3.0 UID:f1a6090d-ee73-4368-8fe6-26302fb3e97a N: 姓;名;;; TEL;CELL:0099912123456 EMAIL:Rey@company.com END:VCARD

这是在多平台(移动和桌面)上共享联系信息的标准字符串格式,我无法真正更改发送/接收 vCard 字符串信息的格式。 发送成功(在移动设备上,它成功将此字符串解析为vcf卡),问题是在桌面上解析接收到的字符串(与发送的字符串完全相同)...

我尝试将接收到的字符串写入流然后解析它:

    LumiSoft.Net.Mime.vCard.vCard card = new vCard();
    MemoryStream stream = new MemoryStream();
    StreamWriter writer = new StreamWriter(stream);
    writer.Write(cardString);
    writer.Flush();
    stream.Position = 0;
    card.Parse(stream);

失败了。然后为了看看发生了什么,我尝试将我得到的字符串写入本地 vcf 文件并打开它,

File.WriteAllText(@"C:\Users\user\Desktop\test.vcf", cardString);

即使我交叉检查了 2 个字符串(发送和接收)并且它们 100% 相同,这也失败了。 (可能缺少标题?)

关于如何解析这个字符串(如上所述)以检索其信息(姓名、电子邮件、照片......)的任何帮助?我注意到一些 SO 帖子提到使用正则表达式来实现这一点,但我希望使用一个库来代替,它不必使用 LumiSoft。提前致谢。

【问题讨论】:

    标签: c# winforms parsing vcf-vcard


    【解决方案1】:

    我不知道 LumiSoft,但你的字符串

    BEGIN:VCARD VERSION:3.0 UID:f1a6090d-ee73-4368-8fe6-26302fb3e97a N: LastName;FirstName;;; TEL;CELL:0099912123456 EMAIL:Rey@company.com END:VCARD
    

    格式无效。

    应该是

    BEGIN:VCARD
    VERSION:3.0
    UID:f1a6090d-ee73-4368-8fe6-26302fb3e97a
    N:LastName;FirstName;;;
    TEL;CELL:0099912123456 EMAIL:Rey@company.com
    END:VCARD
    

    注意换行符而不是单个空格。


    不妨试试Thought.vCards

    【讨论】:

    • 正确格式化字符串。另外,在字符串的开头有一个隐藏的字符从我们的服务器发送,这阻止了解析。在我修剪它之后,一切都解决了。 Thought.vCards 看起来不错,谢谢您的建议
    • Google 通讯录管理 BEGIN:VCARD VERSION:2.1 和联系人(我的 Android 手机)VERSION:3.0
    【解决方案2】:

    EWsoftware.PDI - 这是一个用于解析和创建 vCard 文件的好库。 它以 NuGet 包的形式提供。在 Visual Studio 的 NuGet 管理器中为 vCard 或 EWSoftware 提供 Serach。

    这是指向命名空间描述的链接

    EWsoftware.PDI

    在 EWSoftware.PDI.Parser 中有一个 VCardParser 类,它可以解析文件并返回 vCard 对象的集合,在 EWSoftware.PDI.Objects 中有一个 vCard 类,它也具有将 vCard 对象放入文件的 WriteToStream 方法.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 2011-03-26
      • 2018-04-13
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多