我有一个名字为André
的v-card字符串,我用v-card初始化CNContact
。
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中获取正确的Contacts框架字符串?
答案 0 :(得分: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
如果你想破解vcard中这种特定类型的错误,那么你可以手动将charset注入其中:
let fixed = string.replacingOccurrences(of: "\nN:", with: "\nN;CHARSET=UTF-8:").replacingOccurrences(of: "\nFN:", with: "\nFN;CHARSET=UTF-8:")