【发布时间】:2012-04-01 14:31:22
【问题描述】:
我正在使用 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 字符。我该怎么做才能正确获取地址?
非常感谢您!
【问题讨论】:
标签: objective-c ios unicode nsstring abaddressbook