2017-09-22 68 views
0

获取的HttpResponse消息CONTENTLENGTH为diifferent:的Http CONTENTLENGTH大于实际文件大小

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

获取XML文件长度为:

FileInfo f = new FileInfo(fileName); 
long filesize = f.Length; 

现在打印两种大小的时候,它给了我一个为3970和其他3968. 我想比较两者的大小,但由于这种差异,我没有做到这一点。任何帮助?

+0

我会说这可能是字节顺序标记但是这3个字节不是2. – Lloyd

+0

你试图做一个(自动)响应和文件内容的字节到字节比较以查看差异在哪里? – Sefe

+0

@Lloyd BOM是UTF-16中的2个字节,UTF-32中的4个,以及3个字节(中断)的UTF-8。破坏了,因为UTF-8不需要BOM(事实上,它被Unicode标准禁止),但是一些编辑错了,现在它是一个事实上的(破碎的)标准 –

回答

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和使用其他内容,因为ContentLength是从Headers定义的,因此响应是以Header +内容(额外的2个字节)的形式出现的 – ayushi

+0

我认为这里有一些混乱,你说ContentLength是Headers + Content。这不是真的,它被定义为:“Content-Length实体头字段指示实体主体的大小”它只是HTTP请求主体的大小。如果您可以将文件和响应流的前几个(5)字节作为十六进制字符串以及HTTP的所有响应标题发布,可能是最好的。 – CamW

+0

文件六角内容3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d227574662d3822207374616e64616c6f6e653d22796573223f3ea3c6665656420786d6c3a626173653d22687474703a2f2f6465762d73656c6563742d73657276696365732e79746e696f702e636f6d2f70726f6475637472656769737472792f7365617263682f2220786d6c6e733a643d22687474703 – ayushi

相关问题