2010-11-13 5 views
2

Je lis un fichier texte simple qui contient une seule ligne à l'aide de la classe filestream. Mais il semble que filestream.read préfixe un caractère indésirable au début.Filestream ajoute des caractères inutiles lors de la lecture

Sous le code. Par exemple: Mes données dans le fichier texte sont juste "échantillon". Mais le code ci-dessus renvoie

"?sample" and 
    "???sample" 

Quelle est la raison? est-ce le début de l'indicateur de fichier? est-il un moyen de lire uniquement mon contenu réel ??

+4

Mes données dans le fichier texte est juste « échantillon » <- Etes-vous sûr qu'il n'y a pas la UTF8 nomenclature Infront de celui-ci? Vérifiez-le avec un éditeur hexadécimal. – CodesInChaos

+0

@CodeInChaos, merci pour l'indice, en édition hexadécimale il a l'air "ef bb bf 73 61 6d 70 6c 65 00 et ... échantillon". pourquoi est-ce ... – RameshVel

+0

Si vous avez besoin de supprimer la nomenclature, vous faites déjà quelque chose de mal. Voir http://stackoverflow.com/questions/1317700/strip-byte-order-mark-from-string-in-c. –

Répondre

2

Le byte order mark(BOM) se compose du char Unicode 0xFEFF et est utilisé pour marquer un fichier avec l'encodage utilisé pour celui-ci. Par conséquent, si vous décodez correctement le fichier au format UTF8, vous obtiendrez ce caractère en tant que premier caractère de votre chaîne. Si vous le décodez incorrectement comme ANSI vous obtenez 3 caractères, puisque le codage UTF8 de 0xFEFF est la séquence d'octets "EF BB BF" qui est de 3 octets.

Mais votre code entier peut être remplacé par

File.ReadAllText(fileName,Encoding.UTF8) 

et qui devrait supprimer aussi la nomenclature. Ou vous laissez le paramètre de codage et laissez la fonction détecter automatiquement le codage (pour lequel il utilise la nomenclature)

2

Pourrait être la marque de commande d'octets BOM-a.k.a.

0

Vous lisez la nomenclature à partir du flux. Si vous lisez text, essayez d'utiliser un StreamReader qui s'occupera de cela automatiquement.

0

Essayez plutôt

using (StreamReader sr = new StreamReader(File.Open(path),Encoding.UTF8)) 

Il va certainement vous dépouillent la nomenclature

Questions connexes