Dobrý den,
můj konzolový prohlížeč stále nedovede zobrazit jiné, než ASCII znaky. U ostatních mne čekají buď otazníky, či čaj. Přitom nastavuji výstup konzole na všechny možné kódové stránky. Když mi to po sté nešlo dynamicky, zkusil jsem projet ručně všechny. "Vyhled?v?n?" nepovažuji za valný výsledek... K čemu je vůbec v HtmlDocument (AgilityPack) tolik Encodingů, když je většina null a zkrátka žádný správný, to netuším... Už bych ale chtěl na stránce Google vidět "Vyhledávání"! :D Vskutku to není možné? (Výstupní encoding již byl i na všech Unicode.) Napadá mne jen nějak ještě řešit encoding samotného HTML... Html dostávám takto:
WebResponse resp = new URL().OpenURL(url);
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
newPage = parser.ParsePage(sr.ReadToEnd());
Může to být problém? (Potřebuji ukládat HTML, poněvadž bych jej jinak musel ustavičně stahovat a to nezní lákavě. Předávám si tedy string - ale asi to budu muset vyřešit vcelku v AgilityPack, nebo nevím.)
Děkuji.
Čeho je moc... :D
using (StreamReader sr = new StreamReader(resp.GetResponseStream(), true))
newPage = parser.ParsePage(sr.ReadToEnd(), sr.CurrentEncoding);
Zkus dat breakpoint za nacteni te stranky do stringu a pak se podivej na obsah te stringove promenne, jestli je ta cestina rozbita uz tam. Ja odhaduju, ze v promenne to budes mit jeste spravne a zkazi se to az pri vypisu do konzole.
#2RomanZ
Čaj v proměnné se mi podařil již několikrát. Mám jej tedy dosáhnout? Když mám čaj v proměnné a konzoli nastavenou na správný Encoding, tak to sice nezobrazuje otazníky, či čaj, leč ono to vynechá non-ASCII písmena úplně! (mezerovitost písmen šílená)
"Vyhled�v�n�\r\nObr�zky\r\nMapy\r\nPlay\r\nYouTube\r\nZpr�vy\r\nGmail\r\nDisk\r\nDal��\r\nKalend�� <0>\r\nP�eklada� <1>\r\nN�kupy <2>\r\nBlogger <3>\r\nFotky <4>\r\nVidea <5>\r\nDocs <6>\r\nJe�t� dal�� » <7>\r\nAccount Options\r\nP�ihl�sit se\r\nNastaven� vyhled�v�n� <8>\r\nWebov� historie <9>\r\n×\r\nSurfujte po internetu rychleji\r\nNainstalovat Google Chrome <10>\r\n\r\nRoz���en� vyhled�v�n� <11>\r\nJazykov� n�stroje <12>\r\nInzerujte s Googlem <13>\r\n�e�en� pro firmy <14>\r\n+Google <15>\r\nV�e o Googlu <16>\r\nGoogle.com <17>\r\nOchrana soukrom� <18>\r\nSmluvn� podm�nky <19>\r\n"
A Console.OutputEncoding i Encoding detekovaný analýzou Streamu i skutečný Encoding stránky Google je UTF-8. Výsledkem je, že mi to nezobrazuje vyšší písmena - nad ASCII.
#4Matěj Andrle
zkusil bych google treba hned prvni odkaz...
var req = WebRequest.CreateHttp(@"https://www.google.cz/?q=google+p%C5%99eklada%C4%8D");
var resp = req.GetResponse() as HttpWebResponse;
var en = Encoding.GetEncoding(resp.CharacterSet);
using (StreamReader sr = new StreamReader(resp.GetResponseStream(),en))
{
var ss = sr.ReadToEnd();
Console.WriteLine(ss);
}
#5p3can
Gratuluji - tou nejsložitější cestou jsi se dostal ke stejnému výsledku jako já. Ano - jedna stránka funguje - Google. A co takhle Itnetwork? :D
Musím se smát, poněvadž jinak by mi nezbylo jiného, než pláče. Je logické, že musím nastavovat i ecoding konzole, poněvadž stránky mají miliardu různých encodingů. Ovšem i když tak činím, Itnetwork a x dalších nejede. Google navíc jede jenom bez nastavování encodingu, který by měl být správný. (Console.OutputEncoding) Nějaké další nápady? Štve mě, že si někdo stále myslí, že zrovna já bych sem šel s něčím, čeho je plný Google. Tohoto plný Google vskutku není...
#6Matěj Andrle
to bude asi problem v tom ze itnetwork je zbastleny a nema podporu pro "legaci" prohlizece a snazi se implementovat html5 ikdyz to neprojde pres html5 validaci.
reseni je nacist stranku v tom co dojde, zkusit v ni najit tag meta charset a zmenit cele encodovani podle tohoto tagu. pokud neni tag nalezen pouzit kod viz vyse.(tyka se jen "HTML5" stranek)
#8p3can
Je to prosté. Když to nechám na HTML parseru, tak ten to vezme z tagu. Když to dám do streamu, ten to přeloží do Unicode z kódování, co je v hlavičce. Jenže jak to mám proboha zkombinovat. To by si jedině sám uživatel musel určit, které zobrazení je validní. Nenapadá mne totiž způsob, jak programově ověřit správnost zobrazení. A zrovna Google má v hlavičce jiný encoding, než v tagu. Ten v hlavičce je správný a v tagu špatný. Itnetwork má špatnou hlavičku, ale správný tag. Takže když použiji tvé řešení, jede Google, Youtube atp. Jenže cokoliv s nesedící hlavičkou - často HTML5 - zase nejede...
#13Kit
Pak tedy nebudu schopen zobrazit žádné HTML5? A jakto, že FF je? Hele zkrátka když to nechám být - stáhnu jen HTML a hodím ho jako jediný parametr do HtmlDocument, tak jede každé HTML5 s UTF-8. Jenže jiného ne! A když tam dám CodePage z HttpWebResponse, tak jede jenom Google, Youtube,... Tak co mám dělat? A proč nefunguje nastavení Console.OutputEncoding?
Protože do té doby se každý počítač programoval jinak. UNIX sjednotil systémová volání programů a programy se tím staly přenositelné. To ušetřilo spoustu energie programátorům.
Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
#19Kit
Vskutku - myslím že ale chápeš. Používám UNIX a líbí se mi používání terminálu - proč bych si asi dělal vlastní prohlížeč. Mé představy téměř naplňuje Elinks - ten však nelze upravit jak potřebuji... (Chci spojit Mplayer s JS a prohlížečem - dokonce jsem i přišel na to, jak přehrát SWF...)
EDIT: Totiž mít normální prohlížeč - obrázky, videa,...
#21Kit
Ukaž mi JS, obrázky i videa v Lynxu a kolem projdou 2 stejné černé kočky! (když to je děda Elinks) :D Mplayer umí přehrát online video, s pomocí pár utilitek i SWF (chráněný proud) a obrázky samozřejmě také, rozšiřující knihovny pro JS již existují atd.