2009-12-16 6 views

Répondre

7

Réponse courte (deviner un peu):

text = text.Replace("\xFFFD", "?"); 

Et en savoir plus sur Unicode et character encodings , en particulier utf-8.

Réponse longue:

Eh bien, voulez-vous dire "\ xEF \ XBF \ XBD" littéralement? C'est une chaîne composée de ces caractères:

backslash, uppercase latin character E, uppercase latin character F, backslash, uppercase latin character B, uppercase latin character F, backslash, uppercase latin character B, uppercase latin character D 

Ensuite, la réponse serait:

text = text.Replace(@"\xEF\xBF\xBD", "?"); 

Ou faire par la séquence d'échappement C# vous des séquences de caractères qui sont décrits « \ xEF \ XBF \ XBD "à savoir:

LATIN SMALL LETTER I WITH DIAERESIS, INVERTED QUESTION MARK, VULGAR FRACTION ONE HALF 

(qui sera affiché comme"? ï ¿½) Ensuite, le code serait correct:

text = text.Replace("\xEF\xBF\xBD", "?"); 

Ou voulez-vous remplacer la séquence octets

EF BF BD 

(qui pourrait effectivement être la représentation utf-8 du caractère de remplacement unicode, FFFD, qui est souvent affiché comme « »)?

Ceci est juste une supposition sauvage, mais par intuition dit que vous voulez réellement atteindre ce dernier. Maintenant, une chaîne .Net contient des caractères, pas des octets, mais en supposant que vous avez lu ces octets par ex. d'un fichier comme utf-8, la réponse serait:

text = text.Replace("\xFFFD", "?"); 
+0

Je parlais de la séquence d'octets, et pas seulement des valeurs de caractères simples, votre réponse a bien fonctionné. Mais pouvez-vous expliquer pourquoi je ne peux pas simplement remplacer la séquence d'octets en donnant les valeurs d'octets comme je l'ai fait dans la question et pourquoi je dois écrire \ xFFFD –

+0

bien trouvé la réponse de Wikipedia à mon commentaire: http: // en.wikipedia.org/wiki/Unicode_Specials –

14

Vous devez échapper aux barres obliques inverses.

text = text.Replace("\\xEF\\xBF\\xBD", "?"); 

Alternativement, vous pouvez échapper à la chaîne entière avec le symbole @:

text = text.Replace(@"\xEF\xBF\xBD", "?"); 
+0

Combiné les deux réponses. Donnez un représentant à David, comme il en a besoin. –

+0

Merci Chris! Je ne savais même pas que tu pouvais combiner des réponses. Très sympa. – David

+0

J'ai dû modifier votre message et supprimer le mien. –

Questions connexes