Eu tenho UTF-8 codificado NSData
no servidor Windows e quero convertê-lo NSString
para o iPhone. Como os dados contêm caracteres (como um símbolo de grau) que possuem valores diferentes nas duas plataformas, como converter dados em sequência?
567
Respostas:
Se os dados não tiverem terminação nula, você deverá usar
-initWithData:encoding:
Se os dados forem nulos, você deve usar
-stringWithUTF8String:
para evitar o extra\0
no final.(Observe que, se a entrada não estiver corretamente codificada em UTF-8, você receberá
nil
.)Variante rápida:
Se os dados tiverem terminação nula, você poderá seguir o caminho seguro, que é remover o caractere nulo, ou o caminho não seguro, semelhante à versão Objective-C acima.
fonte
Você poderia chamar esse método
fonte
NSData
sabe quantos bytes ele tem ...NSData
para umNSString
(veja a resposta de KennyTM), estou surpreso que não exista um+(id)stringWithUTF8Data:(NSData *)data
que funcione.Humildemente, envio uma categoria para tornar isso menos irritante:
e
(Observe que se você não estiver usando o ARC, precisará de um
autorelease
.)Agora, em vez do assustadoramente detalhado:
Você pode fazer:
fonte
A versão Swift de String para Data e de volta para String:
Xcode 10.1 • Swift 4.2.1
Parque infantil
fonte
Às vezes, os métodos nas outras respostas não funcionam. No meu caso, estou gerando uma assinatura com minha chave privada RSA e o resultado é NSData. Eu descobri que isso parece funcionar:
Objetivo-C
Rápido
fonte
[[NSData alloc] initWithBase64EncodedString:signatureString options:0]
; Swift :NSData(base64EncodedString: str options: nil)
Apenas para resumir, aqui está uma resposta completa, que funcionou para mim.
Meu problema era que quando eu usava
A cadeia de caracteres que obtive era imprevisível: cerca de 70% continha o valor esperado, mas muitas vezes resultava
Null
ou até pior: lixo no final da cadeia.Depois de algumas escavações, mudei para
E sempre obtém o resultado esperado.
fonte
Com o Swift 5, você pode usar
String
oinit(data:encoding:)
inicializador para converter umaData
instância em umaString
instância usando UTF-8.init(data:encoding:)
tem a seguinte declaração:O seguinte código do Playground mostra como usá-lo:
fonte