DedSec Project

Σταδιακή αποκωδικοποίηση UTF-8 στα όρια τμημάτων — DedSec Project

Σταδιακή αποκωδικοποίηση UTF-8 στα όρια τμημάτων Μηχανισμός και συμβόλαιο Μια ανάγνωση δικτύου επιστρέφει bytes σύμφωνα με buffers και χρόνο μεταφοράς, όχι όρια χαρακτήρων Unicode. Ένας…

Μηχανισμός και συμβόλαιο

Μια ανάγνωση δικτύου επιστρέφει bytes σύμφωνα με buffers και χρόνο μεταφοράς, όχι όρια χαρακτήρων Unicode. Ένας χαρακτήρας UTF-8 πολλών bytes μπορεί να χωριστεί σε δύο τμήματα. Η ανεξάρτητη αποκωδικοποίηση κάθε τμήματος απορρίπτει έγκυρα δεδομένα ή εισάγει χαρακτήρες αντικατάστασης. Ο σταδιακός decoder κρατά ελλιπή bytes ώσπου να συμπληρωθούν.

Χώρισε τα όρια συμπιεσμένων bytes εισόδου, αποσυμπιεσμένων bytes και διατηρούμενων χαρακτήρων. Το streaming δεν περιορίζει μνήμη αν συσσωρεύεις κάθε τμήμα για πάντα. Μετά την αποκωδικοποίηση χρειάζονται όρια εγγραφών· μία ανάγνωση δεν ισούται με μία γραμμή ή έγγραφο JSON. Η άσκηση χωρίζει ελληνικό κείμενο μέσα στον πρώτο χαρακτήρα ώστε το σφάλμα ορίου να αναπαράγεται σταθερά.

Τοπικό παράδειγμα

import codecs
raw = "γνώση".encode("utf-8")
decoder = codecs.getincrementaldecoder("utf-8")(errors="strict")
parts = [decoder.decode(raw[:1]), decoder.decode(raw[1:4]),
         decoder.decode(raw[4:], final=True)]
assert "".join(parts) == "γνώση"
try:
    codecs.getincrementaldecoder("utf-8")().decode(b"\xce", final=True)
except UnicodeDecodeError:
    pass
else:
    raise AssertionError("incomplete character accepted")
print("chunk boundaries handled")

Έλεγχοι αποτυχίας και όρια

Δοκίμασε κάθε θέση διαχωρισμού σε μικρό πολύγλωσσο δείγμα. Η τελική κλήση final=True αποκαλύπτει ελλιπή τελευταίο χαρακτήρα. Προτίμησε αυστηρή απόρριψη σε πρωτόκολλα όταν η αντικατάσταση αλλοιώνει αναγνωριστικά. Αν μια οθόνη χρησιμοποιεί αντικατάσταση για προβολή, κράτησε αυτή την πολιτική χωριστά από επικυρωμένη αποθήκευση και αποφάσεις πρόσβασης.

Πρωτογενής αναφορά

Επίσημη τεκμηρίωση