格式NSString(Char-Replacement,UTF,...)

时间:2012-03-26 12:07:07

标签: iphone ios xcode nsstring utf

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 -> ß

2 个答案:

答案 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);
    }
}