2008-12-16 7 views
2

Lors de la lecture des données du fichier d'entrée, j'ai remarqué que la bibliothèque StreamReader ne lisait pas la symbbe ¥. Mozilla Firefox a montré le type de fichier d'entrée comme Western (ISO-8859-1).Problème avec StreamReader - Codage de fichier inconnu (western iso 88591)

Après avoir joué avec les paramètres d'encodage je l'ai trouvé a travaillé avec succès pour les valeurs suivantes:

System.Text.Encoding.GetEncoding(1252) // (western iso 88591) 

System.Text.Encoding.Default 

System.Text.Encoding.UTF7 

Maintenant, je comptais sur l'utilisation du paramètre « par défaut », mais je ne suis pas très sûr que ce soit la bonne décision. Le code existant n'utilisait aucun encodage et je crains de pouvoir casser quelque chose.

Je connais très peu (ou plutôt rien) à propos de l'encodage. Comment je vais à ce sujet? Ma décision d'utiliser System.Text.Encoding.Default est-elle sûre? Dois-je demander à l'utilisateur d'enregistrer les fichiers dans un format particulier?

Répondre

3

La page de codes 1252 n'est pas tout à fait la même que ISO-Latin-1. Si vous voulez ISO-Latin-1, utilisez Encoding.GetEncoding(28591). Cependant, je m'attendrais à ce qu'ils soient identiques pour ce point de code (U + 00A5). UTF-7 est complètement différent (et presque jamais ce que vous voulez utiliser).

Encoding.Default est pas sûr - c'est une très mauvaise idée dans la plupart des situations. C'est spécifique à l'ordinateur que vous utilisez. Si vous transférez un fichier d'un ordinateur à un autre, qui sait quel encodage utilisait l'ordinateur d'origine?

Si vous savez que votre fichier est en ISO-8859-1, utilisez-le explicitement. Qu'est-ce qui produit ces fichiers? S'ils sont simplement enregistrés par l'utilisateur, dans quel programme sont-ils enregistrés? Si UTF-8 est une option, c'est une bonne option - en partie parce qu'elle peut faire face à l'ensemble de l'Unicode.

J'ai un article on Unicode et un autre sur debugging Unicode issues que vous pouvez trouver utile.

+0

de Joel Spolsky UTF-8 ne fonctionne pas pour moi malheureusement. Lire les articles .. "C'est un grand sujet." n'était pas exactement le début que j'espérais ;-) – Preets

+0

UTF-8 ne fonctionnera pas si vous essayez de lire un fichier encodé en ISO-8859-1, non. Mais si vous pouvez persuader vos utilisateurs d'enregistrer en UTF-8 à la place, ce serait une victoire. –

2

Le code existant n'a pas utilisé le codage

Il ne peut pas avoir explicitement spécifié le codage, auquel cas le codage probablement défaut à Encoding.UTF8. Le nom Encoding.Default peut donner l'impression qu'il s'agit du codage par défaut utilisé par des classes telles que StreamReader, mais ce n'est pas le cas: Comme l'a souligné Jon Skeet, Encoding.Default est l'encodage du système d'exploitation actuel Page de code ANSI.

Personnellement, je pense que cela rend le nom de propriété Encoding.Default quelque peu trompeur.

Questions connexes