2012-02-09 18 views
1

私はこのコードを持っている:CSVファイルの読み込みをエンコードする方法は?

string ABSfilePath = ""; 

CsvFileReader reader = null; 
ABSfilePath = Server.MapPath("/myfile.csv"); 

try 
{ 
    reader = new CsvFileReader(ABSfilePath); 

    CsvRow myRow = new CsvRow(); 
    while (reader.ReadRow(myRow)) 
    { 
     Response.Write(myRow[0].ToString()+"<br />"); 
    } 
} 
catch (Exception err) 
{ 
    Response.Write(err.Message); 
} 
finally 
{ 
    if (reader != null) 
     reader.Dispose(); 
} 

をしかし、私は私のファイルmyfile.csvをインポートしようとすると、一部の文字が "uncorrectly" のように、符号化されています:

だから、
STATUA DELLA LIBERT� 

、どのようにこれをエンコードすることができますか?ありがとう

+0

あなたは、インポートする前にメモ帳またはメモ帳++でファイルを開くと、上記の面白い記号ではなく正しい文字が表示されますか? –

+0

notepad ++で開いています。私はSTATUA DELLA LIBERT・ – markzzz

+0

を受け取っています。それ以前にcharが存在しない場合は、ファイルのエンコーディングが間違っていて、CSV解析ではなく正しい形式とエンコーディングでファイルを取得しています。 –

答えて

2
reader = new CsvFileReader(ABSfilePath); 

が原因です。あなたが最初に正しいエンコーディングでのStreamReaderを開く必要があり

StreamReader MyStreamReader = new StreamReader(ABSfilePath, System.Text.Encoding.WhateverYouNeed); 

が、あなたの場合はどうなり

reader = new CsvFileReader(MyStreamReader.BaseStream); 
+0

私はできません! CsvFileReaderはStreamReaderではなくストリームを取得します。 – markzzz

+0

MyStreamReader.BaseStreamで試したところ、 'MyStreamReader.BaseStream'の代わりに' MyStreamReader'を使用するように編集しました –

+0

Ok!まだ問題が発生しています..私は他のエンコーディングを試しています.. – markzzz

1

がありません、(私はUTF-8を疑う)そのCSVのエンコードとエンコードあなたのページ(html)が一致しません...どちらも同じエンコードを使用するか、CSVのエンコーディングを読み込み時に変換してください。あなたは非標準を使用している...

1

を私はあなたがCsvFileReaderを使用しているクラス/ライブラリ知らないが、最も簡単な方法は、パラメータとしてStreamReaderの代わりABSFilePathに例えば正しいエンコーディングでCSVを開くことであろうあなたはthis oneを使っていると思います。それはあまり設計されておらず、何らかの形でエンコーディングを変更することはできません。あなたはそれを修正するための新しいコンストラクタを追加する必要があります:

public CsvFileWriter(string filename, Encoding encoding) 
     : base(filename, encoding) 
    { 
    } 

今、あなたはそれだけでUTF-8以外のものを読むために得ることができます。まずはEncoding.Defaultです。

関連する問題