2017-09-22 9 views
0

実際のファイルサイズよりもdiifferentです:XMLファイルの長さを取得のHttpん。ContentLengthなどのHttpResponseメッセージん。ContentLengthを取得

var contentLength = response.Content.Headers.ContentLength; 
Console.WriteLine(contentLength); 

として:

サイズの両方を印刷するときに今、それは3970のように私のものを与えている
FileInfo f = new FileInfo(fileName); 
long filesize = f.Length; 

私は両方のサイズを比較したいが、この違いのために、私はそれをやり遂げていない。どんな助け?

+0

私はそれがバイトオーダーマーク可能性が言うでしょうが、それは3つのバイトではない2. – Lloyd

+0

だあなたは(自動化を行うことを試してみました)バイトとバイトの比較応答とファイルの内容の違いはどこですか? – Sefe

+0

@Lloyd BOMは、UTF-16では2バイト、UTF-32では4バイト、UTF-8では3バイト(破損)です。 UTF-8にはBOMは必要ありません(実際にはUnicode標準で禁止されています)が、一部のエディタでは間違っていて、現在はdefacto(broken)標準です –

答えて

0

ストリームとファイルの最初の2バイトを確認します。 UTF-16は2バイトのBOMを持っている、それはおそらくです:

http://www.opentag.com/xfaq_enc.htm#enc_default

First bytes  Encoding assumed 
----------------------------------------- 
EF BB BF   UTF-8 
FE FF    UTF-16 (big-endian) 
FF FE    UTF-16 (little-endian) 
00 00 FE FF  UTF-32 (big-endian) 
FF FE 00 00  UTF-32 (little-endian) 
None of the above UTF-8 
+0

これはUTF-8エンコーディングです。 ContentLengthはヘッダーの定義なので、レスポンスはヘッダー+コンテンツ(余分な2バイト)として受け取ります。 – ayushi

+0

ここでは、ContentLengthがヘッダー+コンテンツであると言います。これは真実ではありません。「Content-Lengthエンティティヘッダーフィールドはエンティティボディのサイズを示します」「HTTPリクエストの本文のサイズにすぎません。ファイルと応答ストリームの最初の数(5)バイトをHTTPの16進文字列とすべての応答ヘッダーとして送信できる場合に最適です。 – CamW

+0

ファイル六角コンテンツ3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d227574662d3822207374616e64616c6f6e653d22796573223f3ea3c6665656420786d6c3a626173653d22687474703a2f2f6465762d73656c6563742d73657276696365732e79746e696f702e636f6d2f70726f6475637472656769737472792f7365617263682f2220786d6c6e733a643d22687474703 – ayushi

関連する問題