DedSec Project

Ανάγνωση και αποθήκευση UTF-8 — DedSec Project

Συνταγή: αρχεία UTF-8 με αυστηρή αποκωδικοποίηση Πότε χρησιμοποιείται και τι πρέπει να επιτύχει Αποθήκευσε ελληνικό κείμενο και emoji σε προσωρινό κατάλογο, έλεγξε ότι τα byte συμφωνούν με…

Συνταγή: αρχεία UTF-8 με αυστηρή αποκωδικοποίηση

Πότε χρησιμοποιείται και τι πρέπει να επιτύχει

Αποθήκευσε ελληνικό κείμενο και emoji σε προσωρινό κατάλογο, έλεγξε ότι τα byte συμφωνούν με την κωδικοποίηση UTF-8 και ότι η ανάγνωση επιστρέφει ακριβώς το αρχικό κείμενο. Όταν τα δεδομένα είναι άκυρα, πρέπει να εμφανίζεται UnicodeDecodeError αντί να αντικαθίστανται κρυφά με σύμβολα. Το όνομα αρχείου και το περιεχόμενό του είναι δύο χωριστές περιπτώσεις χειρισμού Unicode.

Πλήρες εκτελέσιμο παράδειγμα

Αποθήκευσε ως 06_UTF8.py και εκτέλεσε με Python 3. Χρησιμοποιούνται προσωρινά δεδομένα και δεν απαιτείται δίκτυο.

import tempfile
from pathlib import Path
with tempfile.TemporaryDirectory() as folder:
    item = Path(folder) / "σημείωση.txt"
    source = "Καλημέρα 🌍\nγραμμή 2"
    item.write_text(source, encoding="utf-8", newline="\n")
    raw = item.read_bytes()
    assert raw == source.encode("utf-8")
    assert item.read_text(encoding="utf-8") == source
    try:
        raw[:1] + b"\xff"
        (Path(folder)/"bad.txt").write_bytes(b"hello\xff")
        (Path(folder)/"bad.txt").read_text(encoding="utf-8")
    except UnicodeDecodeError:
        pass
    else:
        raise AssertionError("invalid UTF-8 silently decoded")
print("PASS strict UTF-8 roundtrip")

Εγγυήσεις και περιορισμοί

Η Path.write_text με encoding='utf-8' καθορίζει την κωδικοποίηση του περιεχομένου. Η παράμετρος newline='\n' στις κατάλληλες εκδόσεις Python επιβάλλει συνεπή τερματισμό γραμμών. Το UnicodeDecodeError δείχνει ότι κάποια byte δεν αποτελούν έγκυρη UTF-8 και δεν σημαίνει απλώς ότι λείπει γραμματοσειρά στην οθόνη. Η επιλογή errors='replace' μπορεί να βοηθήσει σε προεπισκόπηση αλλοιωμένου αρχείου, αλλά χάνει πληροφορία και δεν ενδείκνυται για έλεγχο ακριβούς αντιγραφής.

Εργαστήριο προσαρμογής

Πρόσθεσε συνδυαστικό τόνο και σύγκρινε τα byte των NFC και NFD, διατηρώντας το αρχικό κείμενο. Δοκίμασε CRLF και αποφάσισε αν το δικό σου πρωτόκολλο απαιτεί αλλαγή τερματισμών. Ξεχώρισε σφάλμα κωδικοποίησης από ανύπαρκτη διαδρομή και έλλειψη δικαιωμάτων. Στο Termux έλεγξε αν πρόβλημα εμφάνισης emoji προέρχεται από γραμματοσειρά και όχι από κατεστραμμένα byte.

Αντιμετώπιση προβλημάτων

Αν ένα αρχείο φαίνεται αλλοιωμένο σε πρόγραμμα επεξεργασίας, έλεγξε τις ρυθμίσεις κωδικοποίησης και τα αρχικά byte πριν αλλάξεις δεδομένα. Μην αποκωδικοποιείς αυθαίρετα κομμένο πρόθεμα UTF-8. Χρησιμοποίησε τη θέση σφάλματος του UnicodeDecodeError για στοχευμένη διάγνωση.