Caractères non valides dans le Fichier.ReadAllText
Je vais appeler File.ReadAllText()
dans un programme conçu pour le format de certains fichiers que j'ai.
Certains de ces fichiers contiennent les ®
(174) symbole. Toutefois, lorsque le texte est lu, la chaîne renvoyée contient �
(65533) symboles où le ®
(174) devraient l'être.
Ce qui serait à l'origine et comment puis-je résoudre ce problème?
OriginalL'auteur mrK | 2013-03-18
Vous devez vous connecter pour publier un commentaire.
Cela est probablement dû à un décalage dans le
Encoding
. Utiliser le ReadAllText de surcharge qui permet de spécifier le bonEncoding
à utiliser lors de la lecture du fichier.La valeur par défaut de surcharge assumera en UTF-8, sauf s'il peut détecter UTF-32. Un autre codage se fera par la manière incorrecte.
Je ne sais pas pourquoi c'est de cette façon, mais c'est ce que le cadre du designer a choisi d'utiliser. Il est documenté, mais je suis d'accord, une drôle de choix.
Une explication pourrait être que
Encoding.Default
utilise le soi-disant ANSI code de la page du système qui varie d'un système à l'autre. L'utilisation de l'UTF-8 évite les erreurs d'encodage que vous obtenez à partir d'encodage et de décodage sur les systèmes avec différents courants des pages de codes ANSI. En outre UTF-8 peut coder tous les caractères UNICODE.OriginalL'auteur Reed Copsey
Plus probable que le fichier contient un encodage différent de la valeur par défaut. Si vous la connaissez, vous pouvez spécifier à l'aide de la Fichier.ReadAllText Méthode (String, Encodage) remplacer.
Exemple de Code:
Si vous NE PAS connaître l'encodage, voir ce précédent DONC, la question: Comment utiliser ReadAllText lors de l'encodage de fichier inconnu
OriginalL'auteur David
Vous devez spécifier l'encodage lorsque vous appelez
Fichier.ReadAllText
, à moins que le fichier est en UTF-8, on dirait qu'il ne l'est pas. (En gros, le paramètre de surcharge équivaut à passer en UTF-8 comme deuxième argument. Il permettra également de détecter UTF-32, avec une marque d'ordre d'octet, je crois.)La première chose à faire est de travailler sur l'encodage de est (par exemple ISO-8859-1 - mais vous avez besoin de vérifier ce) et de passer ensuite que comme deuxième argument.
Par exemple:
C'est toujours important que vous sachiez ce que le codage binaire des données est d'utiliser avant d'essayer de le lire en tant que texte. C'est vrai pour les fichiers, flux réseau, n'importe quoi.
OriginalL'auteur Jon Skeet
Le caractère que vous lisez est le caractère de Remplacement
http://www.fileformat.info/info/unicode/char/fffd/index.htm
Vous obtenez ce parce que l'encodage du fichier ne correspond pas à l'encodage de votre programme prévoit.
Par défaut ReadAllText attend UTF-8. C'est la rencontre d'une séquence d'octets qui ne représente pas un valide de caractères UTF-8, donc de le remplacer par le caractère de Remplacement.
OriginalL'auteur Eric J.