文字列エンコーディングを使用し、NSISOLatin1StringEncoding
- (id)initWithCString:(const char *)nullTerminatedCString
encoding:(NSStringEncoding)encoding
またはまもなく、
NSString *str = [NSString stringWithCString:cfilename
encoding:NSISOLatin1StringEncoding];
コメントの後に編集:
これはちょっと奇妙です。あなたのコメントの後にいくつかの実験を行ったところ、いくつかの奇妙な動作が見つかりました。
- (void) testStringEncodingOK {
NSString *string = @"h\u00c3\u00a5r";
const char *cfilename=[string cStringUsingEncoding:NSISOLatin1StringEncoding];
NSString *cs = [NSString stringWithUTF8String:cfilename];
NSLog(@"String: %@", cs);
}
この出力: hår
ただし、\u ではなく大文字の \U を取得する場合は、それらを \u に置き換えました。そして、それはうまくいきませんでした。、
- (void) testStringEncodingConfused {
NSString *string = @"h\\U00c3\\U00a5r";
string = [string stringByReplacingOccurrencesOfString:@"\\U" withString:@"\\u"];
NSLog(@"Original string:%@", string); // now string = @"h\u00c3\u00a5r"
const char *cfilename=[string cStringUsingEncoding:NSISOLatin1StringEncoding];
NSString *cs = [NSString stringWithUTF8String:cfilename];
NSLog(@"String: %@", cs);
}
出力は h\u00c3\u00a5r