如何在Objective-C中使用变音符号从NSString转换为const char *?

时间:2011-06-17 11:06:11

标签: objective-c unicode utf-8 character-encoding nsstring

我在NSString中转换为const char *的变音符号有问题。

此方法解析单词的文本文件(逐行),将单词保存为NSArray *结果中的字符串。然后转换为const char tmpConstChars。例如,这个const char 保存了像'√§'这样的'ä'。如何从NSString转换为const char * - 我认为这是正确的。

- (void)inputWordsByFile:(NSString *)path
{

    NSError *error = [[NSError alloc] init];
    NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
    NSArray *results = [content componentsSeparatedByString:@"\n"];

    NSMutableArray *words = [[NSMutableArray alloc] initWithArray:results];
    [words removeLastObject];
    for(int i=0; i<[words count]; i++){

    const char *tmpConstChars = [[words objectAtIndex:i] UTF8String];
    [self addWordToTree:tmpConstChars];

    }
}

1 个答案:

答案 0 :(得分:2)

除非我弄错了,UTF8String方法返回字符串的UTF-8编码字节。对于zählen,这些是:

$ perl -MEncode -Mutf8 -E 'say join ", ", map ord, split //, encode("utf8", "zählen")'
122, 195, 164, 104, 108, 101, 110

...其中&lt; 195,164&gt;是UTF-8 encoding sequence for ä。因此,当你进入tmpChars+2时,你会得到带有ASCII代码164的字符。这可能不是你想要的。你unichar之后不是更多吗?有一个characterAtIndex:方法可以返回这些方法,虽然是一个接一个:

NSString *test = @"zählen";
unichar c = [test characterAtIndex:1];
NSLog(@"---> %C", c); // ---> ä