English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Решение проблемы кириллицы в URL для iOS
При создании HTTPS-соединения клиент должен создать HTTPS-адрес
Если адрес содержит китайский текст, программа может аварийно завершить работу, проверка показала, что это связано с тем, что китайский текст не был закодирован
В библиотеке NSString найдены следующие два метода
- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding - (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding
Попробовал, работает
NSString* string1 = @"https://www.cloudsafe.com/папка"; NSString* string2 = [string1 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString* string3 = [string2 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString* string4 = [string2 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString* string5 = [string3 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString* string6 = [string4 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString* string7 = [string5 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
Результат string1-7 приведен ниже
string1:https://www.cloudsafe.com/папка string2:https://www.cloudsafe.com/%E6%96%87%E4%BB%B6%E5%A4%B9 string3:https://www.cloudsafe.com/%25E6%2596%2587%25E4%25BB%25B6%25E5%25A4%25B9 string4:https://www.cloudsafe.com/папка string5:https://www.cloudsafe.com/%E6%96%87%E4%BB%B6%E5%A4%B9 string6:https://www.cloudsafe.com/папка string7:https://www.cloudsafe.com/папка
Кратко расскажу, как я использую:
После合成URL, дайте всему String закодировать два раза.
NSMutableString *address = [[NSMutableString stringWithString:SetNiChengStringWithoutUserNameAndNiCheng] mutableCopy]; address = [[address stringByAppendingString:app.name] mutableCopy]; address = [[address stringByAppendingString:@"/"] mutableCopy]; address = [[address stringByAppendingString:_nameTextField.text] mutableCopy]; address = [[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] mutableCopy]; address = [[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] mutableCopy];
На сервере данные просто хранятся, после получения данных сервер не нуждается в их кодировке в китайский текст.
Когда клиент запрашивает эту часть данных, клиент сам её декодирует.
После получения строки один раз декодируйте её, и она будет отображаться как китайский текст:
str = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
Спасибо за чтение, надеюсь, это поможет вам, спасибо за поддержку нашего сайта!