pwa para notes best app ios swift urldecode

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)" )