CSVファイルがあります。ワードパッドで表示すると、一部の行の終わりにスペースがあります。C#でFile.ReadAllText(filename)を介して読み取る場合、スペースは?として表示されます。これを引き起こしている可能性がありますか?
この空白を削除したいのですが、疑問符がデータを台無しにしているため、正規表現を使用しても機能しません。
CSVファイルがあります。ワードパッドで表示すると、一部の行の終わりにスペースがあります。C#でFile.ReadAllText(filename)を介して読み取る場合、スペースは?として表示されます。これを引き起こしている可能性がありますか?
この空白を削除したいのですが、疑問符がデータを台無しにしているため、正規表現を使用しても機能しません。
ワードパッドによってスペースとして表示される文字が実際には非ASCII文字であるか、ファイルがC#プログラムで予期しないエンコーディングを使用している可能性があります。
16進エディタでファイルを見てください。
16進エディタが手元にない場合は、File.ReadAllBytesを使用してファイルをバイト配列として読み込み、疑問符が表示されている場所の近くで印刷可能なASCII値の範囲外のバイト値を探すことができます。
これを引き起こしている可能性がありますか?
Unicode文字。
ファイルの読み取りに使用しているエンコーディングは何ですか?
デフォルトのエンコーディング(UTF-8)は、0x7F(10進数で127)より高いコードポイントを2オクテット以上で表します。コードポイント0xA0(10進数の160)は、UTF-8で0xC2A0としてエンコードされます。
デコーダーがオクテット0xA0を読み取ると、それは2つのオクテットでエンコードされたコードポイントのリードインオクテットであることがわかります。取得する値は、エンコーディング0xA0??で表されるコードポイントです。どこ '??' 16進数の次のオクテットの値です。
正しいエンコーディングでファイルを読み取る必要があります。ファイルのソースがわからないので、知るのは難しいです。Windows環境を想定した場合、最も疑わしいのは次のエンコーディングの1つです。
このようにしてインスタンスを取得できます。
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 ) ;
}
}
私はそれが古い投稿であることを知っていますが、私の修正を共有しているので、誰かに役立つかもしれません。
同様の問題が発生していました。.CSVファイルが投稿されたときに、ファイルを読み取ってコンテンツを抽出することになりました。
そうしている間、すべての空白文字は������</p>に変換されていました
var contentAsString = Encoding.UTF7 .GetString(contentAsByteArray、0、contentAsByteArray.Length-1);
適切なエンコーディングタイプを追加して、私の問題を修正しました。
最初にファイルをバイト配列として読み取り、次にエンコードタイプを適用します。