Utilisation de .NET pour convertir les fichiers texte codés ISO 8859-1 qui contiennent des caractères accentués Latin-1 en UTF-8
Je suis envoyé des fichiers texte enregistrés dans ISO 88591-1 format qui contiennent des caractères accentués du Latin-1 (normale ASCII de a à z, etc.). Comment puis-je convertir ces fichiers en UTF-8 à l'aide de C#, de sorte que l'octet de caractères accentués dans la norme ISO 8859-1 validité de caractères UTF-8?
J'ai essayé d'utiliser un StreamReader avec ASCIIEncoding, puis la conversion de la chaîne de caractères UTF-8 par l'instanciation de l'encodage ascii
et l'encodage utf8
et puis, à l'aide de Encoding.Convert(ascii, utf8, ascii.GetBytes( asciiString) )
— mais les caractères accentués sont rendus par des points d'interrogation.
Ce qui me manque?
source d'informationauteur Tim
Vous devez vous connecter pour publier un commentaire.
Vous devez obtenir la bonne
Encoding
objet. L'ASCII est juste que c'est nommée: ASCII, ce qui signifie qu'il prend en charge uniquement des caractères ASCII 7 bits. Si ce que vous voulez faire est de convertir les fichiers, puis c'est probablement plus facile que de traiter avec les tableaux d'octets directement.Toutefois, si vous voulez avoir les tableaux d'octets, c'est assez facile à faire avec
Encoding.Convert
.Il est important de noter ici, cependant, que si vous voulez aller dans cette voie, alors vous devriez pas utiliser un encodage de la base de la chaîne de lecteur comme
StreamReader
pour votre fichier IO.FileStream
serait mieux adapté, il va lire les octets des fichiers.Dans l'intérêt de pleinement étudié la question, quelque chose de ce genre:
Dans cet exemple, le
buffer
variable est rempli avec les données réelles dans le fichier comme unbyte[]
donc aucune conversion n'est effectuée.Encoding.Convert
indique une source et une destination de codage, puis enregistre la conversion d'octets dans la variable nommée...converted
. C'est alors écrite dans le fichier de sortie directement.Comme je l'ai dit, la première option à l'aide de
StreamReader
etStreamWriter
sera beaucoup plus simple si c'est tout ce que vous faites, mais le dernier exemple devrait vous donner un indice quant à ce qui se passe réellement.Si les fichiers sont de taille relativement petite (par exemple, ~10 mo), vous aurez seulement besoin de deux lignes de code: