байты являются юникода кодирование: NSUTF32BigEndianStringEncoding
.
Для чтения непосредственно из использования файла:
NSString *unicodeString = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF32BigEndianStringEncoding error:&error];
Тест:
// The next two lines substiture to reading the data from the file:
unsigned char unicode32Chars[4] = { 0x00, 0x01, 0xf6, 0x18 };
NSData *unicode32Data = [NSData dataWithBytes:unicode32Chars length:4];
NSLog (@"unicode32Data: '%@'", unicode32Data);
NSString *unicode32String = [[NSString alloc] initWithData:unicode32Data encoding:NSUTF32BigEndianStringEncoding];
NSLog (@"unicode32String: '%@'", unicode32String);
Выход:
unicodeData: '<0001f618>'
unicodeString: ''
Я подозреваю, что вы, возможно, действительно хотите использовать кодировку UTF-8, но это другая строка байтов:
unsigned char unicode8Chars[4] = { 0xf0, 0x9f, 0x98, 0x98 };
NSData *unicode8Data = [NSData dataWithBytes:unicode8Chars length:4];
NSLog (@"unicode8Data: '%@'", unicode8Data);
NSString *unicode8String = [[NSString alloc] initWithData:unicode8Data encoding:NSUTF8StringEncoding];
NSLog (@"unicode8String: '%@'", unicode8String);
Выход:
unicode8Data: '<f09f9898>'
unicode8String: ''
Вы должны сканировать текст и заменить соответствующие управляющие последовательности с эквивалентным характером. – rmaddy
как это сделать? – dgee4
В дополнение к другим проблемам, поймите, что NSLog часто не отображает символы, отличные от ASCII, правильно. –