Как преобразовать строку в кодировку utf8?

Я читаю мой каталог приложений, как это

NSArray *pathss = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectorys = [pathss objectAtIndex:0];
NSError * error;
NSMutableArray * directoryContents =  [[NSFileManager defaultManager]
                            contentsOfDirectoryAtPath:documentsDirectorys error:&error];

вывод я получаю:

"Forms_formatted.pdf",
"fund con u\U0308u\U0308.pdf",
"hackermonthly-issue.pdf",

это имя файла. мой вопрос, почему я смог преобразовать это имя "Fund Con U \U0308u\U0308.pdf" в правильный формат. заранее спасибо

3 ответа

Преобразовать строку NSString в NSData с кодировкой UTF-16, преобразовать обратно в строку NSString с кодировкой UTF-8. Это, вероятно, UTF-16 с прямым порядком байтов без спецификации. Персонаж не ASCII.

Символ u\U0308 - это не ASCII, это объединяющий диакритический знак,ü, символ также известен как двойная точка сверху, умлаут, греческая диалитика и двойная производная. \ U0308 помещает умлаут над символом u.

Может быть, это поможет:

NSString *documentsDirectorys = [pathss objectAtIndex:0];
const char *documentsDirectoryCstring = [documentsDirectorys cStringUsingEncoding:NSASCIIStringEncoding];

РЕДАКТИРОВАТЬ:

const char *documentsDirectoryCstring = [documentsDirectorys cStringUsingEncoding:NSUTF8StringEncoding];

Вы можете попробовать это. NSLog использовать метод описания NSArray печатать NSArray объект, который имеет дело с символами юникода иначе, чем описание объектов, которые он содержит, таких как объекты NSString. Или вы можете перебрать массив и NSLog каждый предмет.

NSLog(@"%@", [NSString stringWithCString:[[array description] cStringUsingEncoding:NSASCIIStringEncoding] encoding:NSNonLossyASCIIStringEncoding]);
Другие вопросы по тегам