Από πού βγαίνει η λέξη mojibake;
Το mojibake (文字化け) είναι ιαπωνική λέξη: «moji» σημαίνει «χαρακτήρας» και «bake» «μεταμόρφωση». Τη δεκαετία του 1990 οι υπολογιστές στην Ιαπωνία χρησιμοποιούσαν παράλληλα πολλές κωδικοποιήσεις, όπως Shift_JIS, EUC-JP και ISO-2022-JP, γι’ αυτό τα χαλασμένα e-mail και οι ιστοσελίδες ήταν καθημερινό φαινόμενο. Από εκεί η λέξη πέρασε στα αγγλικά και έγινε διεθνής όρος. Στα ελληνικά λέμε συνήθως ότι το κείμενο «βγαίνει κινέζικα».
Πώς δημιουργούνται τα κινέζικα;
Ο υπολογιστής αποθηκεύει το κείμενο ως bytes και η κωδικοποίηση ορίζει ποιο byte αντιστοιχεί σε ποιο γράμμα. Στο Windows-1253 το α είναι ένα byte: E1. Ένα πρόγραμμα που διαβάζει το ίδιο byte ως Windows-1252 δείχνει στη θέση του το λατινικό á. Στο UTF-8, αντίθετα, το α αποθηκεύεται σε δύο bytes, CE B1, που ως Windows-1252 γίνονται α.
Σε αυτό το στάδιο δεν έχει χαθεί τίποτα: τα bytes είναι ακόμη εκεί, απλώς διαβάστηκαν λάθος. Γι’ αυτό τα κινέζικα στις περισσότερες περιπτώσεις αναιρούνται: το Mojibuster μετατρέπει τα λάθος σύμβολα πάλι σε bytes και τα διαβάζει με τη σωστή κωδικοποίηση.
Κινέζικα
Êáëþò Þñèáôå óôçí ÁèÞíá, ç óõíÜíôçóç åßíáé ôçí ÐÝìðôç óôéò 10
Μετά τη διόρθωση
Καλώς ήρθατε στην Αθήνα, η συνάντηση είναι την Πέμπτη στις 10
Οι μορφές των κινέζικων στα ελληνικά
ÊáëçìÝñá: κείμενο σε Windows-1253 που διαβάστηκε με δυτική κωδικοποίηση – η μορφή που ξέρουν όλοι από παλιά e-mail και υπότιτλους.Ελληνικά: κείμενο UTF-8 που διαβάστηκε ως Windows-1252, π.χ. σε Mac, σε φόρμες ιστοσελίδων ή σε PHP.Ελληνικά: κείμενο UTF-8 που διαβάστηκε ως Windows-1253, κυρίως στο ελληνικό Excel: Ελληνικά κινέζικα στο Excel.- Ολόκληρα αρχεία σε Windows-1253 ή ISO-8859-7 μετατρέπονται σε UTF-8: Μετατροπή Windows-1253 σε UTF-8.
Mojibake σε άλλες γλώσσες
- Ιαπωνικά:
縺薙s縺ォ縺。縺ッαντί γιαこんにちは– κείμενο UTF-8 που διαβάστηκε ως Shift_JIS. Περισσότερα στην ιαπωνική σελίδα. - Ρωσικά:
Приветαντί γιαПривет– κείμενο UTF-8 που διαβάστηκε ως Windows-1251. Στα ρωσικά το λένε «krakozyabry». - Δυτικές γλώσσες:
é,ñή€αντί γιαé,ñή€– η πιο συχνή μορφή στον κόσμο.
Συνηθισμένες αιτίες
- Το Excel ανοίγει ένα CSV σε UTF-8 χωρίς BOM ως Windows-1253.
- Η σύνδεση με τη βάση δεδομένων χρησιμοποιεί
latin1, ενώ τα δεδομένα είναι σε UTF-8. - Μια ιστοσελίδα ή ένα e-mail δηλώνει λάθος
charset. - Παλιά αρχεία σε Windows-1253 ανοίγουν σε πρόγραμμα που περιμένει UTF-8.
- Κείμενο που είναι ήδη χαλασμένο μετατρέπεται ξανά και προκύπτουν διπλά κινέζικα.
Διορθώνονται πάντα τα κινέζικα;
Στις περισσότερες περιπτώσεις ναι, εφόσον τα bytes είναι ακέραια. Η διόρθωση είναι αδύνατη αν κάποιο πρόγραμμα αντικατέστησε τα γράμματα με ? ή με τον χαρακτήρα αντικατάστασης �, γιατί τότε η αρχική πληροφορία χάθηκε. Υπάρχει και μια ειδική ελληνική περίπτωση: όταν το UTF-8 διαβάζεται ως Windows-1253, τα γράμματα ρ, ψ, ό, ύ, ώ, ϊ, ΐ και αρκετά κεφαλαία γίνονται αόρατοι χαρακτήρες ελέγχου, κι αν αυτοί σβήστηκαν κατά την αντιγραφή, τα γράμματα λείπουν. Το Mojibuster διορθώνει ό,τι είναι δυνατό και για τα ? και � αναφέρει επίσης πόσα σημεία χάθηκαν. Τα Greeklish δεν είναι mojibake: είναι ελληνικά γραμμένα σκόπιμα με λατινικά γράμματα.
Πώς αποφεύγετε τα κινέζικα;
- Αποθηκεύετε τα αρχεία σε UTF-8 και τα CSV για το Excel ως CSV UTF-8 (οριοθετημένο με κόμματα).
- Δηλώνετε ρητά την κωδικοποίηση:
<meta charset="utf-8">στην HTML καιutf8mb4στη MySQL και στη MariaDB. - Μετατρέπετε το κείμενο μόνο μία φορά, στο σημείο όπου περνά από το ένα σύστημα στο άλλο.
- Στην εισαγωγή επιλέγετε εσείς την κωδικοποίηση, αντί να αφήνετε το πρόγραμμα να μαντέψει.
Συχνές ερωτήσεις
Είναι το αρχείο κατεστραμμένο ή έχει ιό;
Όχι. Τα κινέζικα είναι πρόβλημα εμφάνισης και όχι ιός, και συνήθως δεν σημαίνουν ότι χάθηκαν δεδομένα. Το αρχείο απλώς διαβάστηκε με λάθος κωδικοποίηση.
Ποια η διαφορά ανάμεσα στα κινέζικα και στον χαρακτήρα �;
Κινέζικα όπως ÊáëçìÝñá περιέχουν ακόμη τα αρχικά bytes και διορθώνονται. Ο χαρακτήρας � σημαίνει ότι ένα πρόγραμμα δεν μπόρεσε να διαβάσει ένα byte και το αντικατέστησε – αυτό το γράμμα χάθηκε.
Γιατί εμφανίζονται ερωτηματικά αντί για ελληνικά;
Το πρόγραμμα αποθήκευσε το κείμενο σε κωδικοποίηση που δεν έχει ελληνικά γράμματα και τα αντικατέστησε με ?. Τότε τα γράμματα χάθηκαν και δεν επανέρχονται, γι’ αυτό αξίζει να εξαγάγετε ξανά το αρχείο από την πηγή σε UTF-8.
Ανεβαίνει το κείμενο σε διακομιστή;
Όχι. Το Mojibuster διορθώνει το κείμενο στον browser σας· δεν στέλνεται πουθενά και δεν αποθηκεύεται.