• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z polskimi znakami przy wykonywaniu metod raw_input() oraz write()

Object Storage Arubacloud
+3 głosów
2,268 wizyt
pytanie zadane 6 kwietnia 2015 w Python przez Rubeus024 Obywatel (1,680 p.)
edycja 7 kwietnia 2015 przez Rubeus024

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

 

2 odpowiedzi

0 głosów
odpowiedź 7 kwietnia 2015 przez TheBan Obywatel (1,400 p.)
U mirosława Zelenta jest odcinek do c++ jak zmienić znaki -podejżewam ,że zadziała też w tym przypadku:)
komentarz 7 kwietnia 2015 przez testerius Pasjonat (23,960 p.)
Ale odcinek dotyczy C++ a nie Pythona.
komentarz 7 kwietnia 2015 przez Rubeus024 Obywatel (1,680 p.)
edycja 7 kwietnia 2015 przez Rubeus024
Ale to co zostało pokazane w filmie tłumaczy problem w sposób uniwersalny i pomogło mi rozwiązać inny kłopot z czytaniem tekstu z Windows PowerShell. Dzięki wiktorsi!
0 głosów
odpowiedź 6 czerwca 2015 przez Kaspero Obywatel (1,920 p.)

Na bazie twojego codu mój program do wczytywania z pliku działa !!


# -*- coding: utf-8 -*-
import os.path
import sys

print u"NApisz cokolwiek z polskimi napisami?",
 
odpowiedz=raw_input().decode(sys.stdin.encoding)
print type(odpowiedz) #unicode
bit_odpowiedz=odpowiedz.encode('utf-8') 

plik = open('test.txt', 'w')
plik.write(bit_odpowiedz)
plik.close()

text = open('test.txt').read()
print text


 

Podobne pytania

0 głosów
1 odpowiedź 1,680 wizyt
0 głosów
1 odpowiedź 1,991 wizyt
0 głosów
0 odpowiedzi 888 wizyt
pytanie zadane 21 października 2016 w Python przez adrian313 Bywalec (2,850 p.)

92,619 zapytań

141,468 odpowiedzi

319,786 komentarzy

62,001 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...