2010-12-11 17 views
5

Microsoft.VisualBasic.Fileio.TextFieldParserを使用して、Excel 2003で作成されたCSVファイルを解析しています。拡張アスキー値を疑問符に変換していることを除いて、パーサは機能しています!だから、ファイルの内容であった場合:Microsoft.VisualBasic.FileIO.TextFieldParserは±Ascii 241を?に変更しますか? Ascii 63

±3
TextFieldParserは
を返していますか? 3

私はSystem.Text.Encodingパッケージ内のすべてのエンコーディングを運のない状態で試してみました。私はUTF7でそれを持っていたと思っていましたが、+記号をスペースで置き換えるなど、他の文字を削除していました。

ご協力いただければ幸いです。

+1

「ASCII 241」のようなものはありません。バイト128-255の意味は、** ASCIIの**拡張によって定義されています。これらは多くのものがあります。 –

+2

ファイルが保存されているものを確認しましたか?メモ帳で開き、[名前を付けて保存]を選択すると、エンコードを選択できるドロップダウンが表示されます。それが何であるかを調べると、ANSIの疑いがあります。試してUTF-8として保存してから、再度アプリを実行してみてください。 – Pieter

答えて

15

Microsoft.VisualBasic.Fileio.TextFieldParserの既定値はUTF8エンコーディングですが、テキストファイルはシステムの現在のANSIエンコーディングにあります。 TextFieldParser(string path, Encoding defaultEncoding)のようなエンコーディングを使用するコンストラクタの1つを使用します。

エンコードにはSystem.Text.Encoding.Defaultを渡したり、コードページに新しいエンコードオブジェクトを渡したりすることができます。 English Windowsのデフォルトは1252です。

0
Dim s As String = "± 3" 
    'this produces the ? 
    Dim b() As Byte = System.Text.ASCIIEncoding.ASCII.GetBytes(s) 

    'try this 
    Dim anEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding(28591) 
    b = anEncoding.GetBytes(s) 

    s = anEncoding.GetChars(b) 'check to see if it round-trips 
関連する問題