2010-08-26 7 views
1

J'ai une liste de chaînes que j'écris dans un fichier CSV. Je vous écris ce fichier comme ceci:FileInfo, StreamWriter et StringBuilder. Quel codage produit cette combinaison?

FileInfo outputFile = new FileInfo("c:\output.csv"); 
StreamWriter writer = outputFile.CreateText(); 
StringBuilder line = new StringBuilder(); 

// List<String> listOfItems = ... 
for (int i = 0, j = listOfItems.Count; i < j; i++) { 
    line.AppendFormat(" {0}", listOfItems[i]); 
} 

writer.WriteLine("col1,col2,{0}", line.ToString().Trim(' ')); 
writer.Close(); 

Quand j'examinerai c:\output.csv avec des outils comme Notepad ++ ou enca le fichier semble être le texte brut avec un codage nous-ascii. Mais quand mon client télécharge le fichier CSV à leur boutique en ligne de la colonne construite avec StringBuilder est dans le format suivant:

:VAL1 :VAL2 :VAL3 ... :VALN

cette colonne devrait en fait être:

val1 val2 val3 ... valN

Notez que la ligne incorrecte a côlons préfixé à chaque valeur, et les valeurs ont été majuscules.

La seule chose que je peux comprendre est un problème d'encodage. Alors, quel encodage le code ci-dessus va-t-il générer?

Mise à jour (1 septembre 2010): Il s'est avéré être un bogue d'affichage dans le magasin en ligne à distance. Ce code génère du texte brut comme il se doit.

+0

Cela ne peut pas être un problème d'encodage. Les différents encodages ne sont que des représentations différentes des mêmes données, ils ne remplacent pas les caractères ou ne changent pas la casse du texte. Le problème doit être ailleurs, probablement pas même dans votre code –

Répondre

3

Je ne pense pas que ce soit un problème d'encodage. J'utiliserais une sorte de moniteur de réseau (comme NetMon ou Fiddler) pour vérifier que les données qui sont transférées sont ce que vous attendez. Ma conjecture est que le magasin en ligne manipule les données après que vous l'ayez téléchargé.

1

J'ai exécuté le code que vous avez présenté et examiné le fichier produit en utilisant un éditeur hexadécimal, il a été codé en UTF8/ASCII comme le seul contenu que je peux voir dans le fichier est la sortie de texte (exactement comme écrit) plus une combinaison CR + LF causée par le fait que vous utilisez WriteLine. Tout ce qui provoque la transformation du fichier en :VAL1 :VAL2 :VAL3 n'a rien à voir avec votre code.

Cela dit, la ligne for (int i = 0; j = listOfItems.Count; i < j; i++) n'a pas compilé pour moi, j'ai dû le modifier à for (int i = 0; i < listOfItems.Count; i++) - êtes-vous sûr que c'est ce qui est dans votre code de production?

+0

Il y avait une faute de frappe dans la déclaration for. Je l'ai corrigé. Je viens d'ouvrir mon fichier de sortie avec un éditeur hexadécimal et je suis d'accord. Il ressemble à du texte ASCII clair comme je l'ai prévu. –

+0

@jsumners, je pense que nous pouvons être assez confiants que votre boutique en ligne de clients fait quelque chose, et je "bat s * mental" avec les fichiers qui y sont téléchargés =) Il n'y a aucun moyen de codage lié pourrait faire ce que vous avez décrit dans votre question! =) Quelque chose me dit que c'est un processus qui se produit une fois que le fichier a été déposé sur leur "web store", plutôt que "pendant le transfert", donc je ne sais pas combien d'utilisation, comme Fiddler ou Wireshark serait ... – Rob

+0

Je suis complètement d'accord. Mais je ne travaille pas souvent sur .Net, donc je voulais juste m'assurer que mon hypothèse était correcte. –

Questions connexes