para - Decodificación de URL en iOS
pwa para ios (5)
El método stringByReplacingEscapesUsingEncoding
se está comportando correctamente. El carácter "+"
no forma parte del porcentaje de codificación . Este servidor lo está utilizando incorrectamente; debería estar usando un espacio de porcentaje de escape aquí ( %20
). Si, para una respuesta en particular, desea espacios donde vea los caracteres "+"
, solo tiene que solucionar el comportamiento del servidor realizando la sustitución usted mismo, como ya lo está haciendo.
Estoy usando Swift 1.2 para desarrollar mi aplicación de iPhone y me estoy comunicando con un servicio web http.
La respuesta que estoy recibiendo es en formato de cadena de consulta (pares clave-valor) y URL codificada en .Net
.
Puedo obtener la respuesta, pero buscando la forma correcta de decodificar usando Swift.
La respuesta de la muestra es la siguiente
status=1&message=The+transaction+for+GBP+12.50+was+successful
Intenté la siguiente manera de decodificar y obtener la respuesta del servidor
// This provides encoded response String
var responseString = NSString(data: data, encoding: NSUTF8StringEncoding) as! String
var decodedResponse = responseString.stringByReplacingEscapesUsingEncoding(NSUTF8StringEncoding)!
¿Cómo puedo reemplazar todos los caracteres escapados de URL en la cadena?
En mi caso, NECESITO una señal más ("+") en un número de teléfono en los parámetros de una cadena de consulta, como "+55 11 99999-5555". Después de descubrir que el codificador swift3 (xcode 8.2) no codifica "+" como una señal más, sino espacio, tuve que recurrir a una solución después de la codificación :
Swift 3.0
_strURL = _strURL.replacingOccurrences(of: "+", with: "%2B")
Para codificar y decodificar urls cree esta extensión en algún lugar del proyecto:
Swift 2.0
extension String
{
func encodeUrl() -> String
{
return self.stringByAddingPercentEncodingWithAllowedCharacters( NSCharacterSet.URLQueryAllowedCharacterSet())
}
func decodeUrl() -> String
{
return self.stringByRemovingPercentEncoding
}
}
Swift 3.0
extension String
{
func encodeUrl() -> String
{
return self.addingPercentEncoding( withAllowedCharacters: NSCharacterSet.urlQueryAllowed())
}
func decodeUrl() -> String
{
return self.removingPercentEncoding
}
}
Swift 4.1
extension String
{
func encodeUrl() -> String?
{
return self.addingPercentEncoding( withAllowedCharacters: NSCharacterSet.urlQueryAllowed)
}
func decodeUrl() -> String?
{
return self.removingPercentEncoding
}
}
Swift 2 y posteriores (xCode 7)
var s = "aa bb -[:/?&=;+!@#$()'',*]";
let sEncode = s.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())
let sDecode = sEncode?.stringByRemovingPercentEncoding
En swift 3
extension URL {
var parseQueryString: [String: String] {
var results = [String: String]()
if let pairs = self.query?.components(separatedBy: "&"), pairs.count > 0 {
for pair: String in pairs {
if let keyValue = pair.components(separatedBy: "=") as [String]? {
results.updateValue(keyValue[1], forKey: keyValue[0])
}
}
}
return results
}
}
en su código para acceder a continuación
let parse = url.parseQueryString
print("parse /(parse)" )