English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Решение проблемы кириллической кодировки URL в iOS

Решение проблемы кириллицы в 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]; 

Спасибо за чтение, надеюсь, это поможет вам, спасибо за поддержку нашего сайта!

Вам может понравиться