ktoś Posted March 25, 2009 Report Share Posted March 25, 2009 Nie znając pytona udało mi się w bólach zkodzić coś, co pozwala na grzebanie w htmlu. Ok, niby wszystko działa, pięknie wyciąga usera, datę, ID postów i ich zawartość z forum phpbb3, drukuje mi na ekranie w postaci pseudoXML. Do tego momentu jest dobrze I teraz, odpalam skrypt podając mu konieczne dane w parametrach, a stdout przekierowuję poza ekran: do pliku albo do innego programu - nie ma znaczenia. W obu przypadkach dochodzi do pierwszej polskiej litery "ł" i wywala Ascii Encoding Error Pomijając, że python nie powinien zastanawiać się nad tym, co ja zrobię z wyjściem, a tym bardziej nie powinno go to obchodzić, jak to można obejść? Dowiedziałem się już, że python przechowuje wszystkie teksty w UTF-8. Moja konsola również używa UTF-8. A więc jak wyjście jest wycelowane w konsolę, to działa. Ale nie wiedzieć czemu, cokolwiek bym nie zrobił z wyjściem, python to sprawdza i próbuje mi automatycznie konwertować na ASCII. Da się to jakoś zablokować? Jak to było ładnie powiedziane: nie waże w jakiej postaci będą wyniki, o ile tylko to będzie spójne. A więc mam spójne wyniki, tylko jeszcze muszę je jakoś zapisać, a ręczne przeklejanie 15000 postów mi się nie uśmiecha. Próbowałem też metod z zapisywaniem do pliku zamiast drukowania, oraz z podstawieniem uchwytu do pliku zamiast stdout wewnątrz skryptu, też nie działa. Trafiłem na info o czymś w stylu setappencoding oraz setdefaultencoding, ale sys nie ma takich metod. Dodanie linii kodowania na początku pliku też nie daje efektów. Próbowałem utf8 oraz latin2 ( iso cośtam) aha, może taki test: jakie wyniku dają u Was polecenia echo "import sys print sys.stdout.encoding " | python oraz echo "import sys print sys.stdout.encoding " | python | cat u mnie pierwsze daje utf8, a drugie "None" Link to comment Share on other sites More sharing options...
TSr Posted March 25, 2009 Report Share Posted March 25, 2009 U mnie te polecenia zwracają to samoco tobie. Możesz spróbować przekierować wyniki do pliku podczas wywoływania skryptu. $./skrypt > plik.txt Coś o kodowaniu znaków w Pythonie: http://evanjones.ca/python-utf8.html Ubuntu.pl user #10593 Link to comment Share on other sites More sharing options...
ktoś Posted March 25, 2009 Author Report Share Posted March 25, 2009 Tak, te kody które wrzuciłem robią dokładnie to samo co ./skrypt > plik.txt Właśnie m.in. takie przekierowanie wywala się na pierwszym polskim znaku To o kodowaniu w pythonie poczytam - dzięki Ci za to pokombinuję jeszcze trochę... próbowałem nawet zbindować terminal z plikiem, ale to też nie bardzo działa. Do pliku nic się nie zapisuje Link to comment Share on other sites More sharing options...
ktoś Posted March 29, 2009 Author Report Share Posted March 29, 2009 Well, well, well... W końcu udało mi się dotrzeć do rozwiązania. Rozwiazanie jest wkurwiająco banalne, a jednocześnie równie wkurwiająco nie do odgadnięcia... Otóż: bardzo często pojawia się informacja, że trzeba wpisać sys.setdefaultencoding("") A więc oczywiste jest, że trzeba wpisać: KOD import sys sys.setdefaultencoding("utf-8") I w tym momencie python wywala error, że sys nie ma metody setdefaultencoding. Dziwne... Innym działa. I teraz najbardziej wkurwiający motyw: Linijka, o której informacje ciężko znaleść, a jej zastosowanie jest zarówno konieczne jak i nielogiczne: KODreload(sys) Poprawny kod wygląda więc tak: KOD import sys reload(sys) sys.setdefaultencoding("utf-8") Dowiedziałem się, że nie lubię pythona, bo jest zbyt windowsowy. Próbuje być mądrzejszy ode mnie, a przecież chyba lepiej wiem co chcę zrobić, nie? Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.