2016-03-01 2 views
1

Je construis une application dans Swift et j'utilise Backendless comme backend. Il s'avère que leur base de données est UTF8 et donc je ne peux pas sauvegarder emojis sans convertir la chaîne en premier. Je n'arrive pas à trouver la bonne façon de faire cette conversion en UTF8. J'ai essayé ceci:Swift Conversion UTF16 à UTF8 et retour

let encoding = processedText.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding) 

Mais après cette opération, les emojis ressemblent à ceci: % F0% 9F% 99% 84% F0% 9F% 98% 80% F0% 9F% 98% 92% F0% 9F % 98% 89% F0% 9F% 98% B6% F0% 9F% 98% B6% F0% 9F% 98% 80% F0% 9F% 99% 81

Et j'ai essayé ceci: classe func stringToUTF8String (string: String) -> Chaîne? {

let encodedData = string.dataUsingEncoding(NSUTF8StringEncoding)! 
    let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType] 
    do{ 
    let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil) 
    return attributedString.string 
    }catch _ { 
    } 

    return nil 
} 

Et les emojis ressemblent à ceci: 🤠» 🤠» dy ... DY ™ ðŸ~,ðŸ~ðŸ~ŽðŸ~ ‰ ðŸ~ ... ðŸ~ ‰

Quelqu'un at-il Aucune suggestion? Merci

+0

L'utf 8 prend en charge les emojis. Sauvegardez les données avec l'encodage utf8. Et chargez-le avec l'encodage utf8. – hola

+0

Merci. J'ai mis à jour ma question. – florinzf

+0

Pourcentage d'échappement est à peu près juste pour les URL – hola

Répondre

1

D'abord, pour créer un String de NSData avec UTF8 encodage que vous utilisez

String(data: theData, encoding: NSUTF8StringEncoding) 

En second lieu, déjà de chaîne rapide sont conformes unicode. Vous n'avez pas besoin de les convertir car ils le font déjà. Vous pouvez accéder à différents encodages avec leurs propriétés respectives, par ex. String.utf8, String.utf16, et ainsi de suite.

En troisième lieu, d'avoir NSAttributedString correctement UTF8 votre chaîne de coder les données que vous devez ajouter NSCharacterEncodingDocumentAttribute clé du attributedOptions dictionnaire avec la valeur NSUTF8StringEncoding.

Notes finales, je ne sais pas si c'est une méthode partielle, mais la chaîne attribuée ne devrait pas être utilisée juste pour encoder une chaîne.


Voici NSAttributedString encodage des données dans un format de retour du charabia. enter image description here

Voici les données de codage NSAttributedString comme utf8 et renvoyant le texte correct. enter image description here

Ici est le codage d'une chaîne en tant que chaîne utf8. enter image description here


Je sais que c'est une image, mais je voulais que les résultats montrer. Si cela ne fonctionne pas, la base de données peut être en train de supprimer des bits. Ce qui craint, n'ont également aucune idée de ce qu'il faut faire, et vous ne devriez probablement pas utiliser cette base de données si vous voulez un support Unicode.

+0

Merci pour votre réponse. J'ai essayé d'ajouter NSCharacterEncodingDocumentAttribute à assignedOptions mais cela n'a pas fonctionné. J'ai également essayé d'utiliser string.utf8, mais si vous pouviez me dire comment obtenir à partir de String.UTF8View to String ce serait génial. Cela fait maintenant 2 jours que j'essaye de faire fonctionner ça, vous avez réussi à écrire une fonction qui fonctionne correctement, pourriez-vous l'afficher ici? – florinzf

+0

Ouais, je serais heureux aussi. Avez-vous un exemple de texte que je peux utiliser? – hola

+0

Merci beaucoup hola. J'ai reproduit les résultats que vous avez. Cependant, j'obtiens toujours une erreur en essayant de sauvegarder une chaîne convertie en Backendless. J'attends leur réponse maintenant. Merci encore. – florinzf