(désolé s'il s'agit d'une dupe) p>
Je viens de passer beaucoup de temps à essayer de lire correctement un fichier texte. P>
avoir commencé avec En désespoir que j'ai essayé Je suis en train de me battre pour comprendre pourquoi la valeur par défaut est apparemment uniquement la valeur par défaut si vous le spécifiez. P>
(ma chaîne de test de coupe était fichier.readalltext (chemin) code> et obtenir des caractères vissés, j'ai essayé plusieurs variantes de
fichier.readalltext (chemin, codage) code> après lequel j'ai eu Enlisé Down essayant d'analyser mes fichiers d'entrée pour déterminer quel octet était le problème, etc. p>
fichier.readalltext (chemin, encoding.default) code>, qui a fonctionné! p>
+ 4433Ç CODE>, je l'ai enregistrée dans le Bloc-notes en tant qu'ANSI - bien que les paramètres régionaux français suisses ...) P>
3 Réponses :
encoding.default est le code ANSI du système. P>
Quel fichier.readallText fait si vous ne spécifiez pas de codage, c'est ceci: p>
Donc, le seul moyen d'obtenir le code ANSI du système est de spécifier explicitement encoding.default. p>
File.ReadallText ne vérifie pas la note de commande octet. Il utilisera toujours UTF-8, si vous ne spécifiez pas le codage. Ceci est confirmé par le réflecteur et la source de référence .NET.
Jivko, je ne pense pas que votre commentaire soit correct. ReadallText Sans un codage d'appels ReadallText (chemin, encoding.utf8), mais le flux interne utilisé par ReadallText lira la naissance si elle est présente et remplacez le codage.utf8 avec le codage détecté. En effet, le déteccodingfromByteordermarks est défini sur True dans le constructeur de StreamReader.
de MSDN, sur la surcharge String ReadallText (Chemin de chaîne): P>
Cette méthode tente de détecter automatiquement le codage d'un fichier p> blockQuote>
Donc non, ce n'est pas la même chose que d'utiliser le codage par défaut p>
utf8 est la valeur réelle et utilisée uniquement lorsque la détection automatique n'a pas trouvé de codage. Donc, la naissance est plus importante. Voir les détails ci-dessous:
à partir de l'outil de réflecteur: ceci signifie qu'il crée ReadallText (Chemin de chaîne) CODE> - MSDN: "Cette méthode tente de détecter automatiquement le codage" p>
ReadallText (chemin de chaîne, codage de codage) code> - MSDN: "Cette méthode tente de détecter automatiquement le codage" p>
readalltext (chemin) code> est identique à
readalltext (chemin, Coding.utf8) code>, parce que
readalltext (chemin) code> appelle juste
readalltext (chemin, encoding.utf8) code>. Les deux méthodes crée des méthodes de cette manière: p>
StreamReader (chemin de chaîne, codage de codage, codage de codage de codage, intemporisation boolbyteordermarks, int tampersize) code> avec DétecTenCodingFromByTeordermarks défini sur True. Cela signifie que si la marque d'ordre d'octets (BOM) est présente, il utilisera un codage à partir de la nomenclature, si la nomenclature n'est pas présente, elle utilisera le codage fourni. Si la nomenclature n'est pas présente et que le codage n'est pas fourni, il utilisera UTF8. Donc, le utf8 strud> est la valeur réelle dans ce cas, mais rappelez-vous que la nomination est plus importante que le codage suggéré. P>
// bom.txt is the file with BOM present. nobom.txt - witout BOM
File.ReadAllText("bom.txt"); // use BOM
File.ReadAllText("bom.txt", Encoding.UTF8); // use BOM
File.ReadAllText("bom.txt", Encoding.Default); // use BOM
File.ReadAllText("nobom.txt"); // use UTF-8
File.ReadAllText("nobom.txt", Encoding.UTF8); // use UTF-8
File.ReadAllText("nobom.txt", Encoding.Default); // use system's ANSI codepage
Savez-vous s'il y a un moyen de remplacer la naissance, de sorte que le codage.wikever devient la priorité?
@Danw, vous pouvez essayer d'utiliser Nouveau StreamReader ("Brikfile.txt", encoding.whatever, false) code>. Mais dans ce cas, il traitera probablement de la naissance comme du texte. Vous obtiendrez donc des caractères étranges au début. Assurez-vous de ce que vous faites parce que, lorsque BOM est défini, il est généralement réglé correctement.
Notez que encoding.default ne doit pas être considéré comme le codage "par défaut" - c'est le codage (non unicode!) Pour le codépage par défaut du système par défaut i>.