Как конфертировать из NSString в const char * с помощью умлаутов в Objective-C? - PullRequest
1 голос
/ 17 июня 2011

У меня проблема с умлаутами в преобразовании 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 Ответ

2 голосов
/ 17 июня 2011

Если я не ошибаюсь, метод 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

… где <195, 164> - последовательность кодирования UTF-8 для ä. Таким образом, когда вы нажимаете tmpChars+2, вы получаете символ с ASCII-кодом 164. Что, вероятно, не то, что вы хотите. Разве вы не больше после unichar с? Существует метод characterAtIndex:, который возвращает их, хотя и один за другим:

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