Πρόβλημα με εμφάνιση ελληνικών στην κονσόλα του IDLE

Ξεκίνησε από happiness, 24 Φεβ 2020, 08:53:43 ΠΜ

« προηγούμενο - επόμενο »

happiness

Στα windows 10 που χρησιμοποιώ IDLE 2.7.10 (την έκδοση του βιβλίου δηλαδή), έχω πρόβλημα με την εμφάνιση ελληνικών χαρακτήρων στην κονσόλα κατά την εκτέλεση του προγράμματος (αλλά και κατά την εκτέλεση μεμονομένων εντολών). Όταν μία εντολή στο py αρχείο περιέχει ελληνικά
raw_input('Δώσε το όνομα του μαθητή:')

εμφανίζεται κάτι τέτοιο:
Î"ώσε Ï,,ο όνομα Ï,,οÏ... μαθηÏ,,ή:

Όταν δίνω μεμονομένη εντολή στην κονσόλα πχ
print 'γεια'

πετάει λάθος
Unsupported characters in input

Έχω χρησιμοποιήσει την εντολή ορισμού του encoding στο αρχέιο
# -*- coding: UTF-8 -*-

Η γραμματοσειρά που χρησιμοποιώ είναι Courier.

happiness

Και τώρα παρατηρώ ότι όποτε θέλει τα εμφανίζει τα ελληνικά. Για το πρόγραμμα
# -*- coding: UTF-8 -*-
on=raw_input('Δώσε το όνομα του μαθητή:')
cl=raw_input('Δώσε την τάξη του μαθητή:')
b1=int(input('Δώσε τον βαθμό του 1ου μαθήματος:'))
b2=int(input('Δώσε τον βαθμό του 2ου μαθήματος:'))
b3=int(input('Δώσε τον βαθμό του 3ου μαθήματος:'))
mo=(b1+b2+b3)/3
print 'Ο μαθητής',on,'είναι στην τάξη',cl,'και έχει μέσο όρο',mo

στην κονσόλα βλέπω
Î"ώσε Ï,,ο όνομα Ï,,οÏ... μαθηÏ,,ή:kostas
Î"ώσε Ï,,ην Ï,,άξη Ï,,οÏ... μαθηÏ,,ή:G
Î"ώσε Ï,,ον βαθμό Ï,,οÏ... 1οÏ... μαθήμαÏ,,οÏ,:12
Î"ώσε Ï,,ον βαθμό Ï,,οÏ... 2οÏ... μαθήμαÏ,,οÏ,:14
Î"ώσε Ï,,ον βαθμό Ï,,οÏ... 3οÏ... μαθήμαÏ,,οÏ,:15
Ο μαθηÏ,,ήÏ, kostas είναι σÏ,,ην Ï,,άξη G και έχει μέσο όρο 13

...την τελευταία ελληνική έκφραση δηλαδή την εμφανίζει.

bugman


taxata

Τάσος_Χατζηπαπαδόπουλος
Κύριε δεν έχω internet
http://users.sch.gr/chatzipap/

happiness

Δυστυχώς όχι  :(
Έχω μία βασική κατανόηση για το πως γίνεται η κωδικοποίηση στην python, όμως το πρόβλημά μου εμένα εδώ είναι ότι δεν θέλω να προσθέσω παραπάνω χειρισμό κωδικοποίησης στον κώδικα (πχ εάν προσθέσω το u πριν από κάθε string, τότε εμφανίζονται σωστά, πχ
on=raw_input(u'Δώσε το όνομα του μαθητή:')

) γιατί θέλω να μην μπερδεύω τους μαθητές με τέτοια και για να είμαι συμβατή με το βιβλίο. Επίσης, να πω ότι σε ubuntu μια χαρά εμφανίζονται τα ελληνικά με τον ίδιο ακριβώς κώδικα. Άρα είναι θέμα των windows. Αυτό ψάχνω.

happiness

Παράθεση από: taxata στις 24 Φεβ 2020, 10:57:41 ΠΜ
Δοκίμασε
cp1253
αντι
UTF8
Äþóå ôï üíïìá ôïõ ìáèçôÞ:

:( Κάτι άλλαξε αλλά και πάλι υπάρχει πρόβλημα.

happiness

Το παρακάτω πρόγραμμα από την άλλη, εμφανίζει κανονικά όλους τους χαρακτήρες
# -*- coding: UTF-8 -*-
num=int(input('Δώσε έναν τριψήφιο αριθμό:'))
while num<100 or num>999:
    num=int(input('Έδωσες λαθος αριθμό. Προσπάθησε ξανά:'))
a=num/100
num = num %100
b=num /10
c=num%10
sum =a+b+c
print 'Άθροισμα ψηφίων', sum

Βλέπετε εσείς κάτι που να προκαλεί την διαφορά αυτή σε σχέση με το παραπάνω πρόγραμμα που δεν δουλεύει;

bugman


happiness


alkisg

Εμπλέκονται 4 διαφορετικά encodings:

  • UTF-8: το προεπιλεγμένο παντού εκτός από τα Windows. Στην python3 είναι προεπιλεγμένο και στα Windows οπότε δεν υπάρχει ποτέ κανένα θέμα με τις κωδικοποιήσεις, είναι πρόβλημα μόνο της python2.
  • cp1253: Ελληνικά (ANSI) στα Windows. Αυτά χρησιμοποιούν το notepad και το IDLE 2 από προεπιλογής.
  • cp737: Ελληνικά (OEM) στο DOS. Αυτά χρησιμοποιούν οι μαύρες οθόνες των τερματικών, και του cmd και του "διπλό κλικ σε .py αρχείο".
  • cp1250/cp1252/cp437: Τα λάθος ρυθμισμένα αγγλικά Windows δεν μπορούν να δείξουν μη-unicode ελληνικά, και δείχνουν π.χ. "Äþóå ôï üíïìá ôïõ ìáèçôÞ". Αυτό διορθώνεται κάνοντας Έναρξη → Εκτέλεση → intl.cpl, και επιλέγοντας γλώσσα για μη unicode προγράμματα τα ελληνικά.
Έτσι, ένας τρόπος να βλέπουμε ελληνικά σε python2 και σε κανονικά παράθυρα και σε παράθυρα τερματικού, είναι να βάλουμε τις παρακάτω γραμμές στην αρχή του αρχείου:

Κώδικας: python
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import os

os.system("chcp 65001")
...


Αν ΔΕΝ μας ενδιαφέρουν τα μαύρα τερματικά, και τρέχουμε τα προγράμματα μόνο μέσα από το IDLE, τότε αρκεί το # -*- coding: UTF-8 -*- χωρίς εντολή os.system.

Για να δούμε τι encoding έχει ένα αρχείο, το ανοίγουμε με το notepad, πατάμε αποθήκευση ως, και βλέπουμε τι λέει, π.χ. UTF-8, UTF-8 με BOM, ANSI κλπ.
To IDLE συνήθως είναι αρκετά έξυπνο και αποθηκεύει με αυτό που θα του γράψουμε στην γραμμή κωδικοποίησης, # -*- coding: UTF-8 -*-.

happiness

Παράθεση από: alkisg στις 24 Φεβ 2020, 02:33:09 ΜΜ

  • cp1250/cp1252/cp437: Τα λάθος ρυθμισμένα αγγλικά Windows δεν μπορούν να δείξουν μη-unicode ελληνικά, και δείχνουν π.χ. "Äþóå ôï üíïìá ôïõ ìáèçôÞ". Αυτό διορθώνεται κάνοντας Έναρξη → Εκτέλεση → intl.cpl, και επιλέγοντας γλώσσα για μη unicode προγράμματα τα ελληνικά.
Αυτό φαίνεται να είναι η σωστή λύση. Το έκανα και μέχρι στιγμής σε αυτά που έτρεξα δουλεύει. Ευχαριστώ για άλλη μια φορά alkisg !