2017-12-12 35 views
1

MyFile.txtをが含まれている最後の文字を読みません:のStreamReaderは(16進数)

40 
FFFD 
40 

D8が最後のものであるMyFile.txtをが同じ文字を含ま:

40 40 D8

出力のみである:

40 
40 

場合に最後の文字でありますD8(FFFD)?

+0

ごみが出て、ごみが出ます。それが使用するエンコーディングは、ファイルの内容と一致する必要があり、適切にエンコードされたutf8を提供していません。バイナリコンテンツで面白いのであれば、FileStreamを使う必要があります。 –

+0

ファイルのエンコーディングとは何ですか? – STLDeveloper

+0

whileループの前にnullをチェックするためにこの行を追加してください 'if((n = sr.ReadLine())!= null)' – MethodMan

答えて

0

StreamReaderは、入力がutf8であると予想しています。別のエンコーディングを指定しないか、代わりにバイナリFileStreamを使用しないと、0xFFシーケンスとして表される無効なコードポイントが出力されます。実際の場合には

、0xD8は有効なUnicodeプレフィックス別名「平面セレクタ」ですが、0x40のではとのコードポイントを形成するための有効な連続バイトではありません。http://www.fileformat.info/info/unicode/char/d840/index.htm

U + D840は有効なUnicodeではありませんキャラクター。

Related, interesting read - 第2の状況では、接頭辞だけでは文字に解決されないため、最後の文字はありません。フレームワークは、継続バイトが有効なコードポイントを決定することを期待していますが、ストリームの終わりに遭遇して何も出力しません。