Observe também que você pode usar o -stringByAddingPercentEscapesUsingEncodingmétodo NSString .
Mike Weller
2
Ah sim, agora me lembro do stringByAddingPercentEscapesUsingEncodingcomportamento descolado . Ele codifica apenas '&' e '=' ou algo ridículo assim.
Mike Weller
2
De acordo com o RFC1738, você também precisará codificar caracteres adicionais. Portanto, embora isso responda à pergunta do OP, ele tem utilidade limitada como codificador de URL de uso geral. Por exemplo, ele não lida com dados não alfanuméricos, como um trema alemão.
Alex Nauda
3
Isso não funciona (na parte do iOS 7). Isso não converte & em% 26.
precisa
1
Crie o conjunto de caracteres que você precisa de NSStringcom characterSetWithCharactersInString, leve o inverso com invertedSete use-o com stringByAddingPercentEncodingWithAllowedCharacters. Para um exemplo, veja esta resposta SO .
Se alguém me disser quem escreveu esse código, eu realmente aprecio isso. Basicamente, ele tem algumas explicações sobre por que essa string codificada decodifica exatamente como deseja.
Eu modifiquei um pouco a solução dele. Eu gosto de espaço a ser representado com% 20 em vez de +. Isso é tudo.
@ yuchaozh essa é uma função que você coloca dentro de uma categoria de NSString. Portanto, self é NSStirng e [self UTF8String] retorna, supostamente, sua string no formato UTF8.
libere encodedString e url. esse código é sobre parâmetro de codificação. Para codificar o endereço inteiro, passe a sequência em vez de "parâmetro".
Zahi
Isso funcionou para mim ... codificou até o personagem & com o qual eu estava tendo problemas.
214153Data do upload
3
Isso pode funcionar no ARC do Objetivo C.Use CFBridgingRelease para converter um objeto no estilo Core Foundation como um objeto Objective-C e transferir a propriedade do objeto para o ARC. Consulte a Função CFBridgingRelease aqui.
Aqui está o que eu uso. Observe que você precisa usar o@autoreleasepool recurso ou o programa pode travar ou bloquear o IDE. Eu tive que reiniciar meu IDE três vezes até perceber a correção. Parece que este código é compatível com ARC.
Esta pergunta já foi feita muitas vezes, e muitas respostas foram dadas, mas infelizmente todas as selecionadas (e algumas sugeridas) estão erradas.
Aqui está a sequência de teste que eu usei: This is my 123+ test & test2. Got it?!
O Google implementa isso na Google Toolbox for Mac . Portanto, esse é um bom lugar para saber como eles estão fazendo isso. Outra opção é incluir a caixa de ferramentas e usar sua implementação.
Confira a implementação aqui . (Que se resume exatamente ao que as pessoas estão postando aqui).
ùÕ9y^VêÏÊEØ®.ú/V÷ÅÖêú2Èh~
- nenhuma das soluções abaixo parece resolver isso!Respostas:
Escapar dos personagens que você quer é um pouco mais de trabalho.
Código de exemplo
Saída NSLog:
A seguir, são úteis conjuntos de caracteres de codificação de URL:
Criando um conjunto de caracteres combinando todos os itens acima:
Criando um Base64
No caso do conjunto de caracteres Base64:
Nota:
stringByAddingPercentEncodingWithAllowedCharacters
também codificará caracteres UTF-8 que precisam de codificação.Usando o Core Foundation Without ARC:
Nota:
-stringByAddingPercentEscapesUsingEncoding
não produzirá a codificação correta; nesse caso, não codificará nada que retorne a mesma string.stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding
codifica 14 caracteres:testString:
encodedString:
Nota: considere se esse conjunto de caracteres atende às suas necessidades; caso contrário, altere-os conforme necessário.
Caracteres RFC 3986 que exigem codificação (% adicionado, pois é o caractere de prefixo de codificação):
Alguns "caracteres não reservados" também são codificados:
fonte
-stringByAddingPercentEscapesUsingEncoding
método NSString .stringByAddingPercentEscapesUsingEncoding
comportamento descolado . Ele codifica apenas '&' e '=' ou algo ridículo assim.NSString
comcharacterSetWithCharactersInString
, leve o inverso cominvertedSet
e use-o comstringByAddingPercentEncodingWithAllowedCharacters
. Para um exemplo, veja esta resposta SO .É chamado de codificação de URL . Mais aqui .
fonte
CFURLCreateStringByAddingPercentEscapes()
está obsoleto. Use em[NSString stringByAddingPercentEncodingWithAllowedCharacters:]
vez disso.Esta não é a minha solução. Alguém escreveu no stackoverflow, mas eu esqueci como.
De alguma forma, essa solução funciona "bem". Ele lida com caracteres diacríticos, chineses e praticamente qualquer outra coisa.
Se alguém me disser quem escreveu esse código, eu realmente aprecio isso. Basicamente, ele tem algumas explicações sobre por que essa string codificada decodifica exatamente como deseja.
Eu modifiquei um pouco a solução dele. Eu gosto de espaço a ser representado com% 20 em vez de +. Isso é tudo.
fonte
fonte
Isso pode funcionar no ARC do Objetivo C.Use CFBridgingRelease para converter um objeto no estilo Core Foundation como um objeto Objective-C e transferir a propriedade do objeto para o ARC. Consulte a Função CFBridgingRelease aqui.
fonte
IOS rápido:
Apenas para informação: Eu usei isso:
fonte
Você precisará liberar ou autorelease
str
você mesmo.fonte
Aqui está o que eu uso. Observe que você precisa usar o
@autoreleasepool
recurso ou o programa pode travar ou bloquear o IDE. Eu tive que reiniciar meu IDE três vezes até perceber a correção. Parece que este código é compatível com ARC.Esta pergunta já foi feita muitas vezes, e muitas respostas foram dadas, mas infelizmente todas as selecionadas (e algumas sugeridas) estão erradas.
Aqui está a sequência de teste que eu usei:
This is my 123+ test & test2. Got it?!
Estes são meus métodos de classe Objective C ++:
fonte
O Google implementa isso na Google Toolbox for Mac . Portanto, esse é um bom lugar para saber como eles estão fazendo isso. Outra opção é incluir a caixa de ferramentas e usar sua implementação.
Confira a implementação aqui . (Que se resume exatamente ao que as pessoas estão postando aqui).
fonte
É assim que estou fazendo isso rapidamente.
fonte
// use o método de instância NSString assim:
lembre-se, você deve codificar ou decodificar apenas o valor do parâmetro, e não todo o URL solicitado.
fonte
fonte