2010-07-20 5 views
4

Je tire des courriels français d'une boîte aux lettres et les courriels contiennent des accents. Je crois qu'il utilise l'encodage UTF8.Conversion UTF8 (Cotée imprimable) en C# question

J'ai essayé différentes méthodes de conversion UTF8 trouvées sur Internet, mais je n'ai pas réussi.

Comment, par exemple, en C#, est-ce que je convertis ceci: Montr = C3 = A9al à Montréal?

Modifier: Aussi, il est incohérent. Parfois, il peut être comme Montr & eacute; al. (L'espace après l'esperluette est simplement ajouté afin que le navigateur ne le convertisse pas.)

Merci! Marque

Répondre

3

Ce n'est pas UTF-8. C'est quoted printable, ce qui n'est pas du tout le même type d'encodage que UTF-8 - c'est plutôt un encodage "texte ASCII vers Unicode".

Le texte imprimé imprimable vous permettra effectivement de convertir le message ASCII en un tableau d'octets qui peut être puis être décodé en UTF-8. Je ne suis pas sûr qu'il existe un support direct dans .NET pour l'encodage imprimable entre guillemets, ce qui est assez bizarre ... J'ai peut-être raté quelque chose.

+0

Je ne pense pas que ce soit tout à fait ça. Quand je convertis à partir de QP, je reçois ceci: Montréal. Chaque entité = C3 et = A9 prend une entité distincte. Cependant, ils doivent être interprétés ensemble pour obtenir le é. – user390480

+2

@ user390480: Cela suggère que vous ne convertissez pas correctement QP. Vous devez convertir de QP en binaire, et * puis * utiliser l'encodage UTF-8 pour décoder ce binaire en texte. –

+1

@JonSkeet, j'ai le même problème [ici] (http://stackoverflow.com/q/32083334/7850). Une chance de pouvoir publier un exemple de code d'utilisation de QP? Merci! –

2

Le codage UTF-8 traduit un tableau d'octets (nombres de 8 bits) en chaîne (ou vice versa). C'est à dire. il y a une correspondance entre "nombres" et "caractères". L'ensemble des caractères est plus grand que l'ensemble des caractères ASCII, par exemple é fait partie de UTF-8, mais ne fait pas partie de l'ASCII.

Le codage Quoted-Prinable traduit un tableau d'octets (nombre de 8 bits) en une séquence de caractères ASCII (en réalité un sous-ensemble de celui-ci). Ainsi, en combinant les deux, vous pouvez "encoder" une chaîne UTF-8 en une séquence de (un sous-ensemble) de caractères ASCII (chaîne ASCII).

La même chose peut être faite avec d'autres codages (par exemple ISO-8859-1). Ainsi, vous devez avoir deux informations:

  • La chaîne ASCII est donnée cité imprimable.
  • Le tableau d'octets résultant représente une chaîne ayant un codage UTF-8.

Décodage cité imprimable a donc deux étapes:

  1. Créez le tableau d'octets dire octets [] par les règles imprimables cités, à savoir

    • La sous-chaîne = cartes NM à une octet NM (où NM est hexadécimal) ("N * 16 + M")
    • Tout autre caractère correspond à son octet ASCII (Notez que le mot q-encoded similaire a un mappage supplémentaire pour le _ à espace)
  2. Ensuite, interprétez le tableau d'octets comme une chaîne UTF-8.