6
votes

Comment devrais-je décoder une chaîne UTF-8

J'ai une chaîne comme: xxx

Je comprends que \ xe2 \ x80 \ x93 est un caractère de tiret. Mais comment devrais-je décoder la chaîne ci-dessus en C #?


5 commentaires

Comment obtenez-vous les données dans votre chaîne? Tous les mécanismes d'entrée de cordes C # (que je peux penser) vous permettent de spécifier un codage. Est-ce que vos données d'entrée sont à double codées?


@Rup: Les données m'ont fourni en entrée. Donc, il n'y a aucun moyen pour moi de résoudre ce problème sur le côté entrée.


@Derekhh Nous comprenons que cela vous est fourni, mais d'où / quoi / qui?


Où voyez-vous ces \ x ** séquences de toute façon? Dans le débogueur?


S'il vous plaît, n'incluez pas d'informations sur une langue utilisée dans un titre de question, sauf si cela ne serait pas logique sans cela. Les tags servent cet objectif.


3 Réponses :


8
votes

Si vous avez une chaîne comme celle-là, vous avez utilisé le mauvais encodage lorsque vous l'avez décodé en premier lieu. Il n'y a pas de "chaîne UTF-8", les données UTF-8 sont en train de s'enfoncer que le texte est codé dans des données binaires (octets). Quand il est décodé dans une chaîne, ce n'est plus utf-8.

Vous devez utiliser l'encodage UTF-8 lorsque vous créez la chaîne de données binaires, une fois la chaîne créée à l'aide du mauvais encodage, vous ne pouvez pas Fixe de manière fiable. P>

S'il n'y a pas d'autre alternative, vous pouvez essayer de corriger la chaîne en le codant à nouveau en utilisant le même codage erroné utilisé pour la créer, puis la décoder à l'aide du codage correct. Il n'existe cependant aucune garantie que cela fonctionnera pour toutes les chaînes, certains personnages seront simplement perdus pendant le mauvais décodage. Exemple: P>

// wrong use of encoding, to try to fix wrong decoding
str = Encoding.UTF8.GetString(Encoding.Default.GetBytes(str));


0 commentaires

4
votes

Scannez la chaîne d'entrée Char-By-Char et convertissez les valeurs commençant par \ x ( chaîne à octet [] et retour à < Code> String Utilisation Decoder UTF8 ), laissant tous les autres caractères inchangés: xxx

sortie: xxx


0 commentaires

3
votes

Enfin j'ai utilisé quelque chose comme ceci: xxx


0 commentaires