2015-01-09 6 views
1

Я читаю мой каталог приложения, как этотКак преобразовать строку в кодировку 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", 

Эти имена файлов. мой вопрос, как я могу преобразовать это имя «фонд con u \ U0308u \ U0308.pdf» для исправления формата. заранее заранее

+1

Там ** нет проблем **. Это просто (странный) способ, которым NSArray использует для печати не-ASCII-символов. Если вы обращаетесь к отдельным элементам, например. 'directoryContents [1]', тогда все будет в порядке. Сравните http://stackoverflow.com/questions/16774544/saving-hebrew-text-to-nsuserdefaults-return-strange-encoding. –

+1

На самом деле это слово «фонд con ü.pdf». Я хочу, чтобы он печатал то же самое, что и этот «фонд con u \ U0308u \ U0308.pdf». –

+0

И какой вывод вы получите для 'NSLog (@" file =% @ ", directoryContents [1]);'? –

ответ

-1

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

NSLog(@"%@", [NSString stringWithCString:[[array description] cStringUsingEncoding:NSASCIIStringEncoding] encoding:NSNonLossyASCIIStringEncoding]); 
0

Преобразование NSString в NSData с UTF-16 кодировке, преобразовать обратно в NSString с UTF-8 кодировке. Возможно, это большой UTF-16, без спецификации. Символ не ASCII.

Характер u \ U0308 не является ASCII, это комбинированный диакритический знак ̈ü, символ также известен как двойная точка выше, умлаут, греческая диалитика и двойная производная. \ U0308 помещает умлаут над символом u.

0

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

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

EDIT:

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

Символ u \ U0308 не является ASCII, это комбинирующий символ, он не может быть представлен в ASCII. Это символ объединения UTF-16. – zaph

+0

Я только что редактировал свой пост. – jwlaughton

Смежные вопросы