Google Maps API为我提供了一个字符串,其中包含德语字母:ö,ä,ü以及其他几个特殊字符。
字符串如下:
@" (several spaces ...) Frankfurt an der Oder (several spaces ...) "
(1)如果我尝试stringByReplacing ...
并使空格消失,它看起来像:
@"FrankfurtanderOder"
......哪个更糟糕。所以我需要删除第一个之前和之后的空格,而不是之间的空格。怎么做?
(2)Google有时会向我发送@"W\U00fcrzburg, Deutschland"
... JSON
中没有任何关于编码的请求......可能是JSON解析器而不是api是问题吗?
然而,我仍然必须解决它。有什么想法吗?
到目前为止,谢谢!
修改
对于(2)我将解决方法并替换一些UTF-8字符......(即使这绝对不是最佳解决方案......)
ä -> ä
ö -> ö
ü -> ü
Ä -> Ä
Ö -> Ö
Ü -> Ü
ß -> ß
" -> "
\u00C4 -> Ä
\u00E4 -> ä
\u00D6 -> Ö
\u00F6 -> ö
\u00DC -> Ü
\u00FC -> ü
\u00DF -> ß
答案 0 :(得分:3)
– stringByTrimmingCharactersInSet:
NSString *str = @" Frankfurt an der Oder ";
NSString *trimmed = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSLog(@"\"%@\"", str);
NSLog(@"\"%@\"", trimmed);
2012-03-26 14:10:49.302 xx[3752:f803] " Frankfurt an der Oder "
2012-03-26 14:10:49.333 xx[3752:f803] "Frankfurt an der Oder"
\U00fc
是否出现在UILabel中,或者您是从NSLog获得的?根据我的经验,有时NSLog不会打印已解码的字母,但它们在界面元素中看起来没问题。
答案 1 :(得分:0)
您需要在此处执行以下步骤:
NSString *unescapeBackslashes(NSString *input)
{
// find occurences of '\'
int index = 0;
NSRange range = NSMakeRange(0, input.length);
NSMutableString *output = [NSMutableString string];
while ((range = [input rangeOfString:@"\\u" options:0 range:NSMakeRange(index, input.length - index)]).location != NSNotFound) {
assert(input.length > range.location + 5);
char temp[5];
strncpy(temp, [input cStringUsingEncoding:NSASCIIStringEncoding] + range.location + 2, 4);
[output appendString:[input substringWithRange:NSMakeRange(index, range.location - index)]];
// append the unicode char
[output appendFormat:@"%C", strtol(temp, NULL, 16)];
index = range.location + 6;
}
[output appendString:[input substringWithRange:NSMakeRange(index, input.length - index)]];
return output;
}
int main(int argc, const char *argv[])
{
@autoreleasepool {
NSString *input = @" W\\u00fcrzburg, Deutschland ";
NSLog(@"Input: %@", input);
NSString *trimmed = [input stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSString *escaped = unescapeBackslashes(trimmed);
NSLog(@"Trimmed: %@", trimmed);
NSLog(@"Escaped: %@", escaped);
}
}