Cześć wszystkim,
Dzisiaj natrafiłem na problem, który na razie mnie przerasta. Naukę języka Python zacząłem niedawno, także proszę o wyrozumiałość :)
Po wpisaniu odpowiedzi, który ma polskie znaki, program wysypuje się program z UnicodeEnconeError. Wcześniej ten problem pojawił się już przy raw_input() (pomogła metoda .decode(sys.stdin.encoding), ), ale błąd pojawia się podczas wykonywania write() . Jak to można rozwiązać?
# -*- coding: utf-8 -*-
import os.path
import sys
path='E:\Programy\Python\Ankieta'
filename=os.path.join(path, 'test.txt')
tekst=open( filename, 'a' )
print u"Napisz cokolwiek z polskimi znakami:",
odpowiedz=raw_input().decode(sys.stdin.encoding)
tekst.write(odpowiedz) #błąd
EDIT: Udało się własnymi siłami, ale zostawię ten post, może ktoś będzie również miał z tym problem. Wynika z niego, że aby wysłać tekst do pliku txt, trzeba zamienić typ stringu z unicode na bitowy. Jeżeli się mylę, to niech ktoś mnie poprawi. A propo tego tematu podrzucam link, który mi pomógł to ogarnąć: http://nedbatchelder.com/text/unipain.html
Edit2. Następnym krokiem było przeczytanie z konsoli tekstu zapisanego na komputerze. Po wielu próbach i ten problem został rozwiązany. Windows PowerShell wykorzystuje kodowanie cp1250 i to trzeba wykorzystać do odczytu z pliku. Kod widoczny na samym dole:
# -*- coding: utf-8 -*-
#przykład działa, gdy plik test.txt jest zapisany w kodowaniu utf-8
import os.path
import sys
path='E:\Programy\Python\Ankieta'
filename=os.path.join(path, 'test.txt')
tekst=open( filename, 'a' )
print u"NApisz cokolwiek z polskimi napisami?",
odpowiedz=raw_input().decode(sys.stdin.encoding)
print type(odpowiedz) #unicode
bit_odpowiedz=odpowiedz.encode('utf-8')
print type(bit_odpowiedz) #string
tekst.write(bit_odpowiedz)
# -*- coding: utf-8 -*-
#przykład działa, gdy plik test2 zapisany jest w kodowaniu utf-8
import sys
import os.path
path='E:\Programy\Python\Ankieta'
filename=os.path.join(path, 'test2.txt')
stream=open( filename, 'r' )
tekst=stream.read()
tekst=tekst.decode('cp1250') # Kodowanie zgodne z Windows PowerShell
print tekst