Многоязычный URL-адрес меняется на странные символы после запуска приложения по схеме URL - PullRequest
1 голос
/ 03 мая 2019

Я использую схему URL, предоставленную iOS, для запуска моего приложения из внешнего источника, например с веб-сайта. Например, я создал файл HTML, код которого приведен ниже. Строка запроса содержит несколько японских символов.

<html>
<a href="myapp://?appid=12345&destination=奈良県奈良市雑司町406-1">Visit Todaiji</a>
</html>

Мое приложение успешно открывается по этой схеме URL, когда я открываю этот HTML-файл в симуляторе сафари и нажимаю на ссылку «Посетить Todaiji».

Проблема в том, что я получаю этот URL в делегате с открытым URL

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool 
{
     return true      
}

URL конвертируется в как показано ниже

myapp://?appid=12345&destination =奈良県奈良市é%E2%80%BA‘å%C2%8F¸ç”º406-1

Я пробовал многие типы кодировок (например, UTF-8, ASCII, nonLossyASCII), чтобы преобразовать строку обратно в японский, но ничего не помогло. Если html-файл открывается в Mac Safari и по ссылке щелкают, то же поведение можно увидеть и в адресной строке Safari. Можно ли вернуть строку на японском языке из URL.

1 Ответ

1 голос
/ 03 мая 2019

У URI не должно быть необработанных символов японского (и многих других международных языков). Ваше значение параметра должно быть в процентах.

Этот искаженный параметр может быть результатом того, что необработанный японский текст декодируется как строка в процентах.

Что произойдет, если вы используете это для href?

myapp://?appid=12345&destination=%e5%a5%88%e8%89%af%e7%9c%8c%e5%a5%88%e8%89%af%e5%b8%82%e9%9b%91%e5%8f%b8%e7%94%ba406%2d1

...