MyFile.txtをが含まれている最後の文字を読みません:のStreamReaderは(16進数)
40
FFFD
40
、D8が最後のものであるMyFile.txtをが同じ文字を含ま:
40 40 D8
出力のみである:
40
40
場合に最後の文字でありますD8(FFFD)?
MyFile.txtをが含まれている最後の文字を読みません:のStreamReaderは(16進数)
40
FFFD
40
、D8が最後のものであるMyFile.txtをが同じ文字を含ま:
40 40 D8
出力のみである:
40
40
場合に最後の文字でありますD8(FFFD)?
StreamReader
は、入力がutf8であると予想しています。別のエンコーディングを指定しないか、代わりにバイナリFileStream
を使用しないと、0xFFシーケンスとして表される無効なコードポイントが出力されます。実際の場合には
、0xD8は有効なUnicodeプレフィックス別名「平面セレクタ」ですが、0x40のではとのコードポイントを形成するための有効な連続バイトではありません。http://www.fileformat.info/info/unicode/char/d840/index.htm
U + D840は有効なUnicodeではありませんキャラクター。
Related, interesting read - 第2の状況では、接頭辞だけでは文字に解決されないため、最後の文字はありません。フレームワークは、継続バイトが有効なコードポイントを決定することを期待していますが、ストリームの終わりに遭遇して何も出力しません。
ごみが出て、ごみが出ます。それが使用するエンコーディングは、ファイルの内容と一致する必要があり、適切にエンコードされたutf8を提供していません。バイナリコンテンツで面白いのであれば、FileStreamを使う必要があります。 –
ファイルのエンコーディングとは何ですか? – STLDeveloper
whileループの前にnullをチェックするためにこの行を追加してください 'if((n = sr.ReadLine())!= null)' – MethodMan