我正在使用ABPeoplePickerNavigationController让用户选择一个地址。在模拟器中一切正常。但是如果一个地址包含非“ASCII”等非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字符。如果能正确获取地址,我该怎么做?
非常感谢你!
答案 0 :(得分:3)
您的代码或输出没有任何问题。你显示错了。以UTF-8编码的字母'ü'是0xC3 0xBC。在MacRoman字符集中,字节0xC3表示字符'√',字节0xBC表示'º'。将输出看作UTF-8(它是),而不是MacRoman(它不是)并且你已经设置了。
答案 1 :(得分:0)
使用NSUTF8StringEncoding使用方法stringWithUTF8String:对您的字符串进行编码。
例如,
NSString *str = [NSString stringWithUTF8String:"your string for encoding"];
与你的情况一样
NSString *object = [NSString stringWithUTF8String:[[addressData objectForKey:key] cStringUsingEncoding:NSUTF8StringEncoding]];
或者
NSString *object = [NSString stringWithUTF8String:[[addressData objectForKey:key] UTF8String]];
如果您需要更多帮助,请与我联系。
希望这有帮助。