Avatar billede Syska Mester
05. januar 2008 - 20:19 Der er 14 kommentarer og
2 løsninger

download af fil fra nettet, giver 2 forskellige størrelser

Ved at bruge følgende kode ... til at hente:
http://s1.travian.dk/map.sql som er en tekst fil ...

Får jeg to forskellige angivelser i størelse ...

Hvad sker der lige ... \n\r måske ... men hvordan kan jeg kontrollere at jeg har hele filen ... ?

Grunden til at det helst skal løses er at nogen gange får jeg kun 29%, 99% af filen ... og det er bare ikke acceptabelt ...

Så hvad dælen sker der lige ....

Kode:
System.Net.WebClient client = new System.Net.WebClient();
try
{
    System.Net.HttpWebRequest req = (HttpWebRequest)WebRequest.Create(f_FileUri);
    req.Timeout = 2000;
    HttpWebResponse rep = (HttpWebResponse)req.GetResponse();

    System.IO.Stream data = client.OpenRead(f_FileUri);

    Console.WriteLine("Length: " + client.ResponseHeaders["Content-Length"]);

    using (System.IO.StreamReader reader = new System.IO.StreamReader(data))
    {
        string s = reader.ReadToEnd();
        Console.WriteLine("String length: {0}", s.Length);
        //while (!reader.EndOfStream)
        //{
        //    f_list.Append(reader.ReadLine().Replace("`x_world`", "[x_world]") + "²;²");
        //}
        return false;
    }
}
catch (Exception ex)
{
    f_Log.AddEntry(f_SID, Log.Type.Error, "FetchData(), Error: {0}", ex.Message);
    return false;
}
finally
{
    client.Dispose();
}

// ouT, brug for mere info ... just ask
Avatar billede arne_v Ekspert
05. januar 2008 - 20:31 #1
Umiddelbart burde linie skift ikke være et problem.

Jeg tror at dit problem er karakter sæt !
Avatar billede arne_v Ekspert
05. januar 2008 - 20:32 #2
HTTP header Length indeholder antal bytes.

Længden af ens tring måles i chars.

Hvis UTF-8 så er de to forskellige.
Avatar billede arne_v Ekspert
05. januar 2008 - 20:32 #3
Check også om der evt. skal angives en Encoding til din StreamReader.
Avatar billede Syska Mester
05. januar 2008 - 20:45 #4
er karakter sæt ... smider løsnigen jeg fik andensteds fra her ...

Smid et svar og du skal få point for at angive samme løsning.

http://rafb.net/p/1jK3wo68.html
Avatar billede Syska Mester
05. januar 2008 - 20:45 #5
halv svar
Avatar billede arne_v Ekspert
05. januar 2008 - 20:51 #6
kommer her
Avatar billede arne_v Ekspert
05. januar 2008 - 20:54 #7
men bemærk at selv med korrekt encoding kan client.ResponseHeaders["Content-Length"]
vær forskellig fra s.Length !

client.ResponseHeaders["Content-Length"] og Encoding.UTF8.GetByteCount(s) bør returnere
det samme (så længe det er UTF-8).
Avatar billede Syska Mester
05. januar 2008 - 21:52 #8
ohhh,

Hvordan kan det være du kan være forskellige ?

jeg mener at når det på et tidspunkt kan være det samme ... må det da betyde at en "karakter" ikke fylder 1 byte hele tiden, men kommer op på 2 ... ?

i UTF8 fylder en karakter vel 2 bytes ...

Synes det virker mærkeligt .... du kan måske forklare det ...

// ouT
Avatar billede Syska Mester
05. januar 2008 - 21:59 #9
glem det ... jeg er med nu ... og det virker på den måde jeg regnede med ... sådan ca.

Jeg kan bare ikke se hvorfor forskellen et eller andet sted ikke er det dobbelte ...

Fra headers: Content-Length: 5007657
Byte Length: 5007657
UTF8 String Length: 4998121

Efter min hjerne burde den være ca. det halve ... men det er den så ikke .. hvorfor ?

// ouT
Avatar billede arne_v Ekspert
05. januar 2008 - 23:12 #10
Den lidt overforsimplede forklaring på UTF-8 er at engelske bogstaver fylder 1 byte mens danske
bogstaver fylder 2 bytes.
Avatar billede arne_v Ekspert
05. januar 2008 - 23:14 #11
Og at du altså har 5007657 - 4998121 = 9536 danske tegn i filen.
Avatar billede Syska Mester
06. januar 2008 - 00:25 #12
Den kan jeg godt godtage ... troede bare ikke den kunne finde ud af at veksle mellem hvad der var hvad ... men UTF8 er så lidt klog alligevel :-)

// ouT
Avatar billede arne_v Ekspert
06. januar 2008 - 04:18 #13
Sådan lidt mere teknisk er det unicode værdier <128 der bliver til 1 byte og dem over bliver til 2 (eller flere !) bytes.
Avatar billede Syska Mester
06. januar 2008 - 15:34 #14
okay ... blev lidt klogere ...

Ved du så hvad de sidste 128 bit i den første byte bruges til ?
Avatar billede arne_v Ekspert
06. januar 2008 - 17:12 #15
Sidste 128 bit ??

Den højeste bit er 0 for værdier < 128 og kan vel så betragtes som en markering af at det er en 1 byte char.
Avatar billede Syska Mester
06. januar 2008 - 17:32 #16
ohhh, mener bare den sidste bit .... men ja, det angiver jo så om det er en 2 eller flere byte ...

Jeg takker ... er blevet klogere :-)

// ouT
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester