Mam następujący komunikat błedu, po poniższym kodzie.
UnicodeEncodeError: 'ascii' codec can't encode character u'\u015a' in position 0: ordinal not in range(128)
#!/usr/bin/python2
# -*- coding: utf-8 -*-
import re
import sys
wzorzec= u"^(Kosma|Jarema|[A-ZĆŁŚŹŻ][a-ząćęłńóśźż]*[^a]) ([A-ZĆŁŚŹŻ][a-ząćęłńóśźż]+)$"
for line in sys.stdin:
line=unicode(line,"utf-8")
dopasowanie = re.search(wzorzec, line)
if dopasowanie:
print dopasowanie.group(2)
else:
print '<NONE>'
Widzę gdzie jest problem dopasowanie.group(2)
. Próbowałam zmienić kodowanie w Shebangs (Mam nadzieję że dobrze zapamiętałam). na unicode zamiast utf-8, dostałam komunikat że jest problem z BOM, a nie wiem czy idę we właściwym kierunku. Gdy ten sam kod(chodzi mi że serce programu jest takie samo, różni się tylko że czytam z pliku linijka po linijce), puszczam z pod windowsa i czytam linijka po linijce z pliku a nie standardowego wejścia-wszystko działa poprawnie.
Gdy w powyższym kodzie zamiast print dopasowanie.group(2)
dam print "a"
kod działa.
Kod ma na celu sprawdzenie czy podana istota w formacie imię nazwisko jest przedstawicielem płci męskiej. Imiona mogą zawierać polskie litery i to rodzi problemy. Imię męskie to imie nie kończące się na a z wyjątkiem Kosma i Jarema, to mam dobrze działa mi to jak wspomniałam.