我使用ABPeoplePickerNavigationController让用户选择一个地址。在模拟器中一切正常。但是如果一个地址包含像“ü”这样的非ASCII字符,我的设备上的结果会很奇怪。我有这样的代码:NSString似乎杀死Unicode字符
- (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,
的地址正确的输出将是“一些81000,慕尼黑,德国,德,“。最令我困惑的是,\ u00fc是“ü”的正确的Unicode代码点。我尝试了很多东西,包括单独打印每一个unichar,但结果不会改变。无论我在访问NSDictionary中的值时做什么似乎都会杀死Unicode字符。我能做些什么来简单地获取地址?
非常感谢您提前!
谢谢。我没有想到这一点,因为Xcode的调试窗口显示来自模拟器的字符串很好,我转发地址的地理编码器也失败了。但重启设备后,地理编码器运行良好,因此它真的只是一个显示问题! – aus 2012-04-02 16:56:46