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

Solução para problemas de código mal formatado de URL do IOS

Solução para problema de caracteres chineses confusos em URLs no iOS

Ao fazer uma conexão HTTPS, é necessário que o cliente crie um endereço HTTPS

Se o endereço contiver caracteres chineses, o programa entrará em crash, verificação revelou que a razão é que os caracteres chineses não foram codificados

Encontrei duas funções abaixo na biblioteca NSString

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding
- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding

Experimentei, eficaz

NSString* string1 = @"https://www.cloudsafe.com/pasta ";
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];

Saída do 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:@"/
  address = [[address stringByAppendingString:_nameTextField.text] mutableCopy];
  address = [[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] mutableCopy];8StringEncoding] mutableCopy];
  address = [[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] mutableCopy];8StringEncoding] mutableCopy];

No lado do servidor, como armazenar simplesmente, o servidor pode receber os dados sem codificar em chinês

Quando o cliente solicitar essa parte dos dados, o cliente próprio decodifica

Depois de obter a string, decodifique uma vez para poder exibir normal como chinês:

 str = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] mutableCopy];8StringEncoding]; 

Obrigado por ler, espero que ajude a todos, obrigado pelo apoio ao site!

Você também pode gostar