ktoś Napisano Marzec 25, 2009 Zgłoś Share Napisano Marzec 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 do komentarza Udostępnij na innych stronach More sharing options...
TSr Napisano Marzec 25, 2009 Zgłoś Share Napisano Marzec 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 do komentarza Udostępnij na innych stronach More sharing options...
ktoś Napisano Marzec 25, 2009 Autor Zgłoś Share Napisano Marzec 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 do komentarza Udostępnij na innych stronach More sharing options...
ktoś Napisano Marzec 29, 2009 Autor Zgłoś Share Napisano Marzec 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 do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.