Tengo UTF-8 codificado NSDatadesde el servidor de Windows y quiero convertirlo NSStringpara iPhone. Dado que los datos contienen caracteres (como un símbolo de grado) que tienen valores diferentes en ambas plataformas, ¿cómo convierto los datos en cadenas?
567

Respuestas:
Si los datos no tienen terminación nula, debe usar
-initWithData:encoding:Si los datos están terminados en nulo, debería utilizarlos
-stringWithUTF8String:para evitar el extra\0al final.(Tenga en cuenta que si la entrada no está correctamente codificada en UTF-8, obtendrá
nil).Variante rápida:
Si los datos están terminados en nulo, puede ir de la manera segura que es eliminar ese carácter nulo, o la forma insegura similar a la versión de Objective-C anterior.
fuente
Podrías llamar a este método
fuente
NSDatasabe cuántos bytes tiene ...NSDataa unaNSString(ver la respuesta de KennyTM), me sorprende que no haya una+(id)stringWithUTF8Data:(NSData *)dataque simplemente funcione.Presento humildemente una categoría para que esto sea menos molesto:
y
(Tenga en cuenta que si no está utilizando ARC, necesitará un
autoreleaseallí).Ahora en lugar de lo terriblemente detallado:
Tu puedes hacer:
fuente
La versión Swift de String a Data y de regreso a String:
Xcode 10.1 • Swift 4.2.1
Patio de recreo
fuente
A veces, los métodos en las otras respuestas no funcionan. En mi caso, estoy generando una firma con mi clave privada RSA y el resultado es NSData. Descubrí que esto parece funcionar:
C objetivo
Rápido
fuente
[[NSData alloc] initWithBase64EncodedString:signatureString options:0]; Swift :NSData(base64EncodedString: str options: nil)Solo para resumir, aquí hay una respuesta completa, que funcionó para mí.
Mi problema era que cuando usaba
La cadena que obtuve fue impredecible: alrededor del 70% contenía el valor esperado, pero con demasiada frecuencia resultó con
Nullo incluso peor: basura al final de la cadena.Después de cavar un poco, cambié a
Y obtuvo el resultado esperado cada vez.
fuente
Con Swift 5, puede usar
Stringelinit(data:encoding:)inicializador para convertir unaDatainstancia en unaStringinstancia usando UTF-8.init(data:encoding:)tiene la siguiente declaración:El siguiente código de Playground muestra cómo usarlo:
fuente