63 votes

Que signifie "=C2=A0" dans un texte codé MIME, entre guillemets et imprimable ?

Voici un exemple d'email brut que j'essaie d'analyser :

MIME-version: 1.0
Content-type: text/html; charset=UTF-8
Content-transfer-encoding: 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 texte entre guillemets, mais aucun ne le traite correctement. Comment analyser correctement ce texte en C# ?

Honnêtement, pour l'instant, je suis en train de coder :

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

Parce que je n'arrive pas à comprendre pourquoi ce texte est là au hasard dans le contenu MIME, et n'est pas censé être rendu dans quoi que ce soit. En le supprimant, j'obtiens l'effet désiré - mais POURQUOI ? !

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

119voto

Steven Sudit Points 13793

=C2=A0 représente les octets C2 A0. Comme il s'agit de l'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 d'analyser ce texte en C# ? Tous les analyseurs que j'ai essayés fonctionnent 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 est toujours codé sur 2 octets comme ceci ? Puis-je supposer une correspondance de (=[0-9A-F]{2}=[0-9A-F]{2}) au lieu d'un seul octet ? Pourquoi diable n'y a-t-il pas d'analyseur syntaxique pour cela ?

13 votes

Si vous vous documentez sur l'UTF-8, vous verrez que toute valeur d'un seul octet qui dépasse 7F doit être codée en deux caractères, et le premier aura toujours son bit de poids fort activé. Donc, oui, A0 est toujours codé comme C2 A0, ce qui signifie que vous ne pouvez pas aller octet par octet. La bonne façon de gérer l'UTF-8 avec le codage cité est de décoder d'abord la partie citée, puis 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 non cassant.

-10voto

Ygor Points 1

%C2%A0 C'est le code d'un dossier caché, créez un dossier caché et enregistrez-y, par exemple, un fichier texte, puis ouvrez ce fichier via un navigateur et vous verrez ces caractères dans la barre de recherche. D'après ce que j'ai compris, ces caractères sont facultatifs et ne se traduisent pas par d'autres codes.

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