将Unicode文本转换为ASCII会增加额外的字符

时间:2018-03-02 21:31:17

标签: ios objective-c nsdata clplacemark

我有这个原始字符串101\U2013113 W 4th St

应该阅读101-113 W 4th St

此字符串来自CLPlacemark

placemark.addressDictionary[@"Street"]

然而,当我用:

解码时
NSData *decode = [placemark.addressDictionary[@"Street"] dataUsingEncoding:NSUnicodeStringEncoding allowLossyConversion:YES];
NSString * address =  [[NSString alloc] initWithData:decode encoding:NSASCIIStringEncoding];

它在字符串的开头输出一些我无法粘贴的额外字符,但NSLog显示"\U00ff\U00fe101\^S 113 W 4th St Chattanooga TN 37402";

如果我NSLog是地标,则应该101-113 W 4th St

我做错了什么?

1 个答案:

答案 0 :(得分:2)

  

我做错了什么?

一切。不推荐使用addressDictionary,在任何情况下都无需解码任何数据;地址信息已作为字符串发送给您。 (它不清楚" raw"字符串应该是什么;字符串是一个字符串。)你不能将字符串转换为ASCII,因为它可能(和这里)包含nonASCII字符。只需使用您给出的字符串。

CLPlacemark具有subthoroughfare(门牌号码)和thoroughfare(街道名称)等属性,或者如果您想要整个地址,请获取其postalAddress格式使用CNPostalAddressFormatter(您需要导入Contacts框架)。