Περίπτωση 1: ρόμβοι � σε σωστό αρχείο
Αν ένας επεξεργαστής, ένα πρόγραμμα αναπαραγωγής ή ο browser δείχνει � αντί για όλα τα ελληνικά, το αρχείο συνήθως είναι αποθηκευμένο στην παλιά κωδικοποίηση Windows-1253 ή ISO-8859-7 και το πρόγραμμα το διαβάζει ως UTF-8. Τα bytes των ελληνικών γραμμάτων δεν είναι έγκυρα σε UTF-8, γι’ αυτό το πρόγραμμα βάζει � μόνο στην εμφάνιση. Μέσα στο αρχείο τα σωστά bytes είναι στη θέση τους. Περισσότερα για τις δύο κωδικοποιήσεις: Windows-1253 και UTF-8.
Λύση: σύρετε το αρχικό αρχείο στο πλαίσιο παραπάνω. Το Mojibuster αναγνωρίζει την κωδικοποίηση κατά την ανάγνωση και αποθηκεύει το αρχείο σε UTF-8. Σημαντικό: χρησιμοποιήστε το ίδιο το αρχείο και όχι κείμενο αντιγραμμένο από το πρόγραμμα – με την αντιγραφή τα � μένουν για πάντα.
Περίπτωση 2: τα � ή ? γράφτηκαν μέσα στο κείμενο
Αν ένα πρόγραμμα αποθήκευσε ή έστειλε το κείμενο ήδη με �, τα αρχικά γράμματα χάθηκαν. Το ίδιο ισχύει για το ?: τα προγράμματα το βάζουν όταν ένα γράμμα δεν υπάρχει στην κωδικοποίηση προορισμού. Για παράδειγμα, όταν αποθηκεύουν σε ASCII ή γράφουν σε στήλη βάσης δεδομένων χωρίς ελληνικά. Τότε το Αθήνα γίνεται ?????.
Αυτά τα γράμματα δεν επανέρχονται: όλα έγιναν το ίδιο σύμβολο. Το Mojibuster δεν μαντεύει, αλλά δείχνει πόσα σημεία επηρεάστηκαν. Βοηθά μόνο η πηγή: κάντε νέα εξαγωγή ή πάρτε ένα αντίγραφο ασφαλείας.
Από πού βγαίνουν τα ερωτηματικά
- Βάση δεδομένων: στήλη ή σύνδεση σε
latin1ήascii, ενώ τα δεδομένα έρχονται σε UTF-8. Τότε η MySQL αποθηκεύει????αντί για ελληνικά – δείτε MySQL και phpMyAdmin. - Παλιά ιστοσελίδα σε PHP: η σελίδα είναι σε Windows-1253 ή ISO-8859-7, αλλά η κωδικοποίηση δεν δηλώνεται στην κεφαλίδα ή στο
<meta charset>. Ο browser τη διαβάζει ως UTF-8 και δείχνει�. Αν πάλι η σύνδεση με τη βάση ανοίγει χωρίς κωδικοποίηση, στη βάση γράφονται?αντί για γράμματα. - Σημειωματάριο, «Αποθήκευση ως» → ANSI: σε αγγλικά ή γερμανικά Windows το ANSI είναι δυτική κωδικοποίηση και τα ελληνικά αποθηκεύονται ως
?. Σε ελληνικά Windows το ANSI είναι το Windows-1253: τα ελληνικά σώζονται, άλλοι χαρακτήρες όμως (π.χ. emoji ή πολυτονικά) γίνονται?. - Παλιά προγράμματα e-mail: μηνύματα σε ISO-8859-7 χωρίς σωστή δήλωση κωδικοποίησης ανοίγουν σε προγράμματα που περιμένουν UTF-8 – και αντί για κείμενο φαίνονται
�. - PowerShell 5.1: το
Export-Csvγράφει από προεπιλογή ASCII και αντικαθιστά τα ελληνικά με?– δείτε PowerShell. - Python: το
encode('ascii', errors='replace')αντικαθιστά σιωπηλά τα γράμματα με?– δείτε Python και pandas. - Γραμμή εντολών των Windows: δουλεύει με την κωδικοποίηση της κονσόλας (στα ελληνικά Windows CP737) και δείχνει άγνωστους χαρακτήρες ως
?. Συνήθως χαλάει μόνο η εμφάνιση, όχι το αρχείο.
Πώς καταλαβαίνετε ποια περίπτωση έχετε
- Ανοίξτε το αρχείο σε επεξεργαστή που δείχνει την κωδικοποίηση, π.χ. στο Notepad++. Αν η γραμμή κατάστασης γράφει «ANSI» ή «Windows-1253», είναι η περίπτωση 1.
- Σύρετε το αρχείο στο Mojibuster. Αν διαβαστεί ως Windows-1253 ή ISO-8859-7 και τα ελληνικά επανέλθουν, ήταν η περίπτωση 1 – δείτε Windows-1253 και UTF-8.
- Αν το Mojibuster αναφέρει χαμένους χαρακτήρες, είναι η περίπτωση 2. Τότε βοηθά μόνο μια νέα εξαγωγή.
Αν αντί για ερωτηματικά βλέπετε συνδυασμούς όπως ÊáëçìÝñá ή Î•Î»Î»Î·Î½Î¹ÎºÎ¬, πρόκειται για άλλο λάθος, που σχεδόν πάντα διορθώνεται: τι είναι τα κινέζικα.
Συχνές ερωτήσεις
Μπορεί το Mojibuster να κάνει τα ? ξανά γράμματα;
Όχι. Ένα ? μπορεί να σημαίνει οποιοδήποτε γράμμα, η πληροφορία χάθηκε. Το Mojibuster αφήνει αυτά τα σημεία όπως είναι, αλλά δείχνει πόσα είναι.
Γιατί σε ένα πρόγραμμα βλέπω � και σε άλλο όλα είναι σωστά;
Τότε το αρχείο είναι εντάξει και μόνο το ένα πρόγραμμα το διαβάζει με λάθος κωδικοποίηση. Αποθηκεύστε το αρχείο σε UTF-8 με το Mojibuster και θα το δείχνουν σωστά και τα δύο.
Τι είναι το σύμβολο �;
Είναι ο χαρακτήρας αντικατάστασης U+FFFD. Τα προγράμματα τον βάζουν όταν δεν μπορούν να διαβάσουν ένα byte ως γράμμα. Δείχνει λάθος κωδικοποίησης και δεν ανήκει στο ίδιο το κείμενο.