63 votes

Qu'est-ce que "=C2=A0" dans un texte MIME encodé en quoted-printable ?

C'est un exemple d'e-mail brut que j'essaie d'analyser:

Version MIME : 1.0
Type de contenu : text/html; charset=UTF-8
Encodage de transfert de contenu : quoted-printable
X-Mailer : Verizon Webmail
X-Originating-IP : [x.x.x.x]

=C2=A0test testing testing 123

Qu'est-ce que =C2=A0? J'ai essayé une demi-douzaine d'analyseurs de quoted-printable, mais aucun ne gère cela correctement. Comment analyser correctement cela en C#?

Honnêtement, pour le moment, je code:

//TODO WTF
encoded = encoded.Replace("=C2=A0", "");

Parce que je n'arrive pas à comprendre pourquoi ce texte est là de façon aléatoire dans le contenu MIME, et il ne doit pas être affiché. En le supprimant simplement, j'obtiens l'effet désiré - mais POURQUOI ?!

Pour être clair, je sais que (=[0-9A-F]{2}) représente un caractère encodé. Mais dans ce cas, il semble ne rien représenter.

119voto

Steven Sudit Points 13793

=C2=A0 représente les octets C2 A0. Comme il s'agit d'UTF-8, cela se traduit par U+00A0, qui est l'Unicode pour l'espace insécable.

Voir UTF-8 (Wikipedia).

0 votes

Quelle est la façon de l'analyser en C#? Tous les analyseurs que j'ai essayés agissent sur chaque caractère indépendamment, et font ceci : int iHex = Convert.ToInt32(hex, 16); char c = (char)iHex;

0 votes

Est-ce que l'UTF-8 encode toujours sur 2 octets comme cela? Puis-je supposer une correspondance de (=[0-9A-F]{2}=[0-9A-F]{2}) au lieu de l'octet unique? Pourquoi diable n'y a-t-il pas de parseur pour cela ?!?!?!?!

13 votes

Si vous vous renseignez sur l'UTF-8, vous verrez que toute valeur d'un seul octet dépassant 7F doit être codée en deux caractères, et le premier aura toujours son bit élevé défini. Donc, oui, A0 est toujours codé en C2 A0, ce qui signifie que vous ne pouvez pas y aller octet par octet. La bonne façon de gérer l'UTF-8 avec l'encodage entre guillemets est de d'abord décoder la partie entre guillemets, puis décoder l'UTF-8, ce qui donne une chaîne composée de caractères de 2 octets (techniquement UCS-16 ou UTF-16).

0voto

Yi Yang Points 27

%C2%A0 est un espace insécable

-10voto

Ygor Points 1

%C2%A0 Voici le code d'un dossier caché, créez un dossier caché et sauvegardez-y, par exemple, un fichier texte, puis ouvrez ce fichier à travers un navigateur et vous verrez ces caractères dans la barre de recherche. À ma connaissance, ces caractères sont facultatifs et ne se traduisent pas en un autre code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X