2017-09-18 71 views
-1

我有一个名片字符串,名字为André,我用v-card初始化一个CNContactCNContact属性编码

BEGIN:VCARD 

VERSION:2.1 

N:Foo;André;;; 

FN:André Foo 

TEL;CELL:00023 4474848 

END:VCARD 

我初始化与原始字符串这样的接触:

if let data = string.data(using: .utf8) { 
    do { 
     let contacts = try CNContactVCardSerialization.contacts(with: data) 
     let contact = contacts.first 
     return contact 

    } catch { 
     print("Data is not a VCard") 
    } 
} 

但是,当我打印出来的原始字符串的contact.givenName我得到:

André

哪有我在iOS中获取适当的联系人框架字符串?

回答

-1

你需要添加一个字符集到vcard字段,它默认为ASCII。

BEGIN:VCARD 

VERSION:2.1 

N;CHARSET=UTF-8:Foo;André;;; 

FN;CHARSET=UTF-8:André Foo 

TEL;CELL:00023 4474848 

END:VCARD 

如果你想破解周围的虚拟卡这一特定类型的错误,那么你可以手动注入的字符集到它:

let fixed = string.replacingOccurrences(of: "\nN:", with: "\nN;CHARSET=UTF-8:").replacingOccurrences(of: "\nFN:", with: "\nFN;CHARSET=UTF-8:") 
+0

但如果我无法控制的字符集?假设我从第三方获得vcard ... –

+0

然后,第三方需要修复他们的电子名片。 – dan

+0

这根本没用,对不起。如果网络就是这样,我们现在都应该放弃... –