2013-06-05 3 views
2

У меня было приложение для iPhone в магазине в течение 2 лет, которое загружало локальные файлы HTML в веб-просмотр. Во время обновления я столкнулся с проблемой с файловыми путями. Один из элементов в пути на русском языке, который по-прежнему выглядит нормально в _finalPath, но когда я обертываю его в NSURL, кириллические буквы преобразуются в юникодные объекты, разбивая путь к файлу HTML.Обтекание NSString (путь к файлу) в NSURL прерывает Unicode?

//finalPath is figured in and passed on from tenseListViewController 
//ACK - this now seems to turn брать into %D0%B1%D1%80%D0%B0%D1%82%D1%8C in the middle of the path! 
NSLog(@"-->starting showInfo: _finalPath is %@", _finalPath); 
NSURL *url = [NSURL fileURLWithPath:_finalPath]; 
NSLog(@"*url is %@", url); 

Вот результат в журнале:

2013-06-05 13: 51: 39,409 NewTryout [29609: c07] -> начиная ShowInfo: _finalPath является/Users/cford/Библиотека/Application Support/iPhone Simulator/6.1/Приложения/8C06E53D-BFA6-4EA5-823A-0EBDBB3B51B2/NewTryout.app/глаголы/лиги/несовершенные/Present.html

2013-06-05 13: 51: 39.409 NewTryout [ 29609: c07] * url - файл: //localhost/Users/cford/Library/Application%20Support/iPhone%20Simulator/6.1/Applications/8C06E53D-BFA6-4EA5-823A-0EBDBB3B51B2/NewTryout.app/verbs/ % D0% B1% D1% 80% D0% B0% D1% 82% D1% 8C/несовершенный/Present.html

Является ли это изменение в iOS5 или 6, или я должен смотреть на что-то другое в мой код? Какие-либо предложения?

ответ

2

Не-ASCII-символы просто не разрешены в URL-адресах для начала (IRI были изобретены для замены URL-адресов, в частности для поддержки Unicode). Ваши русские символы кодируются в октеты UTF-8, а затем эти октеты кодируются по URL-адресу. Это правильное поведение для URL-адресов и прекрасно работает в HTML-ссылках. Если WebView не открывает файл HTML правильно при нажатии ссылки, то сам WebView должен быть поврежден при обработке URL-адресов. Это должно быть URL-декодирование и UTF8-декодирование данных до его использования. Если это не так, то это ошибка в WebView. Если WebView просто не дает вам URL-адреса необработанного URL-адреса при щелчке ссылки, и вы сами открываете файл, и в этом случае вы обязаны декодировать данные URL-адреса, а затем использовать его в остальной части вашего кода.

+0

Спасибо Remy, это имеет смысл (хотя теперь я удивлен, что этот код работает в приложении для доставки так долго). WebView не открывает файлы, потому что пути имеют имя папки на русском языке. Если нет обходного пути, мне просто нужно переименовать эти папки с помощью ASCII? – Curt

+1

Как ТОЧНО URL, который используется с WebView? Можете ли вы показать свой фактический код? –

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