Я использую ABPeoplePickerNavigationController, чтобы позволить пользователю выбрать адрес. Все отлично работает в симуляторе. Но если адрес содержит символы не ASCII, такие как «ü», результат на моем устройстве будет странным. У меня есть этот код:
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {
ABMultiValueRef addressesMultiValue = ABRecordCopyValue(person, property);
NSArray *addresses = (__bridge_transfer NSArray*)ABMultiValueCopyArrayOfAllValues(addressesMultiValue);
CFRelease(addressesMultiValue);
NSDictionary *addressData = [addresses objectAtIndex:0];
NSLog(@"%@", addressData);
NSArray *addressKeys = [[NSArray alloc] initWithObjects:(NSString*)kABPersonAddressStreetKey,
(NSString*)kABPersonAddressZIPKey,
(NSString*)kABPersonAddressCityKey,
(NSString*)kABPersonAddressStateKey,
(NSString*)kABPersonAddressCountryKey,
(NSString*)kABPersonAddressCountryCodeKey, nil];
NSMutableString *address = [[NSMutableString alloc] init];
for (NSString *key in addressKeys) {
NSString *object = [addressData objectForKey:key];
if (object) {
[address appendFormat:@"%@, ", object];
}
}
NSLog(@"%@", address);
Вывод addressData выглядит так:
{
City = "M\U00fcnchen";
Country = Deutschland;
CountryCode = de;
Street = "Some street";
ZIP = 81000;
}
и вывод для адреса:
Some street, 81000, München, Deutschland, de,
Правильный вывод для адреса: «Some street, 81000, München, Deutschland, de,». Больше всего меня озадачивает то, что \ U00fc - это правильный код Unicode для «ü». Я перепробовал много вещей, включая распечатку каждого отдельного unichar, но результат не меняется. Что бы я ни делал при доступе к значению в NSDictionary, похоже, убивает символ Unicode. Что я могу сделать, чтобы просто получить правильный адрес?
Большое спасибо заранее!