2010-08-03 6 views
1

J'ai un programme qui, en un mot, lit les valeurs d'une base de données SQL et les écrit dans un fichier texte délimité par des tabulations. Le problème est que certaines des valeurs dans la base de données ont des caractères spéciaux (TM, tiret, points de suspension, etc.). Lorsqu'elles sont écrites dans le fichier texte, le formatage est perdu et elles apparaissent comme des ordures "â" ¢ ou â € "Correction de caractères spéciaux dans la chaîne

Lorsque la valeur est affichée dans la fenêtre immédiate, avant qu'il ne soit écrit dans le fichier txt, tout semble bien. Ma conjecture est que c'est un problème d'encodage. Mais, je ne suis pas sûr de savoir comment procéder, où regarder, ou quoi chercher.

Est-ce ASCII ou UTF-8? Si c'est l'un d'entre eux, comment puis-je le corriger avant qu'il ne soit écrit dans le fichier texte.

Voilà comment je construis le fichier texte (où feedStr est un StringBuilder)

objReader = New StreamWriter(filePath) 
objReader.Write(feedStr) 
objReader.Close() 

Répondre

2

L'encodage par défaut pour StreamWriter est UTF8 (sans marque d'ordre octet). Votre fichier de résultat est correct, la question est de savoir à quoi l'ouvrir après? Si vous l'ouvrez dans un éditeur de texte compatible UTF8, les caractères devraient ressembler à ce que vous voulez.

Vous pouvez également écrire le fichier texte dans un autre codage, par exemple iso-8859-1 (latin1)

objReader = New StreamWriter(filePath, false, Encoding.GetEncoding("iso-8859-1")) 
+0

Mikael, vous êtes l'homme! Cela a fonctionné comme un charme! Réponse parfaite! – s15199d

+0

PRESQUE ... Je l'ai changé pour Encoding.GetEncoding ("utf-8") Qui fixe tous mes caractères spéciaux. Mais, maintenant, il se faufile avec le délimiteur ControlChars.Tab. FYI ... mon fichier de sortie doit être encodé en UTF-8, mais il va à Google et c'est le format requis. – s15199d

+0

Vous pourriez probablement utiliser Encoding.UTF8 au lieu de GetEncoding. –

Questions connexes