2

CSVファイルがあります。ワードパッドで表示すると、一部の行の終わりにスペースがあります。C#でFile.ReadAllText(filename)を介して読み取る場合、スペースは?として表示されます。これを引き起こしている可能性がありますか?

この空白を削除したいのですが、疑問符がデータを台無しにしているため、正規表現を使用しても機能しません。

4

4 に答える 4

4

ワードパッドによってスペースとして表示される文字が実際には非ASCII文字であるか、ファイルがC#プログラムで予期しないエンコーディングを使用している可能性があります。

16進エディタでファイルを見てください。

16進エディタが手元にない場合は、File.ReadAllBytesを使用してファイルをバイト配列として読み込み、疑問符が表示されている場所の近くで印刷可能なASCII値の範囲外のバイト値を探すことができます。

于 2012-08-14T20:18:03.127 に答える
0

これを引き起こしている可能性がありますか?

Unicode文字。

于 2012-08-14T20:17:53.653 に答える
0

ファイルの読み取りに使用しているエンコーディングは何ですか?

デフォルトのエンコーディング(UTF-8)は、0x7F(10進数で127)より高いコードポイントを2オクテット以上で表します。コードポイント0xA0(10進数の160)は、UTF-8で0xC2A0としてエンコードされます。

デコーダーがオクテット0xA0を読み取ると、それは2つのオクテットでエンコードされたコードポイントのリードインオクテットであることがわかります。取得する値は、エンコーディング0xA0??で表されるコードポイントです。どこ '??' 16進数の次のオクテットの値です。

正しいエンコーディングでファイルを読み取る必要があります。ファイルのソースがわからないので、知るのは難しいです。Windows環境を想定した場合、最も疑わしいのは次のエンコーディングの1つです。

  • 「標準」のWindowsコードページ、windows-1252
  • ISO-8859-1別名Latin-1
  • ISO-8859-2別名ラテン語-2

このようにしてインスタンスを取得できます。

Encoding windows1252 = Encoding.GetEncoding( "windows-1252" ) ;
Encoding latin1      = Encoding.GetEncoding( "iso-8859-1"   ) ;
Encoding latin2      = Encoding.GetEncoding( "iso-8859-2"   ) ;

使用法は次のようなものです。

    Encoding windows1252Encoding = Encoding.GetEncoding( "windows-1252" ) ;

    using ( TextReader tr = new StreamReader( @"c:\foo\bar\bazbat.csz" , windows1252Encoding ) )
    {
        string line ;
        while ( null != (line=tr.ReadLine()) )
        {
            process( line ) ;
        }
    }
于 2012-08-14T21:28:27.203 に答える
0

私はそれが古い投稿であることを知っていますが、私の修正を共有しているので、誰かに役立つかもしれません。

同様の問題が発生していました。.CSVファイルが投稿されたときに、ファイルを読み取ってコンテンツを抽出することになりました。

そうしている間、すべての空白文字は������</p>に変換されていました

var contentAsString = Encoding.UTF7 .GetString(contentAsByteArray、0、contentAsByteArray.Length-1);

適切なエンコーディングタイプを追加して、私の問題を修正しました。

最初にファイルをバイト配列として読み取り、次にエンコードタイプを適用します。

于 2016-04-27T07:38:26.083 に答える