我在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];
}
}
答案 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); // ---> ä