Τι είναι το BOM;
Το σήμα σειράς byte (BOM) ή σήμα σειράς byte, είναι ένα ειδικό σήμα που εισάγεται σε ένα αρχείο Unicode κωδικοποιημένο με UTF-8, UTF16 ή UTF-32 για τον προσδιορισμό του τύπου κωδικοποίησης ενός αρχείου Unicode. Για το UTF-8, δεν απαιτείται BOM, καθώς χρησιμοποιείται για τη σήμανση του τύπου κωδικοποίησης και της σειράς byte (big-endian ή little-endian) ενός κωδικοποιημένου αρχείου πολλών byte. Στο UTF-8, ο αριθμός των bit που κωδικοποιούνται για κάθε χαρακτήρα εκφράζεται από το πρώτο byte και δεν υπάρχει διάκριση μεταξύ big-endian και little-endian. Το UTF-8 δεν απαιτεί BOM, αν και το πρότυπο Unicode επιτρέπει τη χρήση BOM στο UTF-8. Επομένως, το UTF-8 χωρίς BOM είναι η τυπική μορφή και είναι κυρίως η συνήθεια της Microsoft να τοποθετεί ένα BOM σε ένα αρχείο UTF-8 (παρεμπιπτόντως: είναι επίσης συνήθεια της Microsoft να αποκαλεί το UTF-16 με ένα BOM "Unicode" χωρίς να υπεισέρχεται σε λεπτομέρειες). Τα BOM προετοιμάζονται για UTF-16 και UTF-32 για να επισημάνουν τη σειρά byte. Η Microsoft χρησιμοποιεί το BOM στο UTF-8 επειδή επιτρέπει μια σαφή διάκριση μεταξύ κωδικοποίησης UTF-8 και ASCII, διαφορετικά το άνοιγμα ενός αρχείου CSV στο Excel μπορεί να είναι αλλοιωμένο. Αλλά ένα τέτοιο αρχείο μπορεί να προκαλέσει προβλήματα σε λειτουργικά συστήματα εκτός των Windows. Η διαφορά μεταξύ "UTF-8" και "UTF-8 με BOM" είναι αν υπάρχει BOM ή όχι. Δηλαδή αν υπάρχει U+FEFF στην αρχή του αρχείου. Ο κώδικας ιστού UTF-8 δεν πρέπει να χρησιμοποιεί BOM, διαφορετικά τα σφάλματα είναι κοινά. Κατά την έξοδο ενός αρχείου CSV από απόκριση http, δεν περιλαμβάνεται από προεπιλογή όταν έχει οριστεί σε utf8 BOM, αλλά το Windows Excel χρησιμοποιεί BOM για να επιβεβαιώσει την κωδικοποίηση UTF8 και όλα πρέπει να γράψουν BOM στην αρχή του αρχείου.
Όταν αναπτύσσετε για πρώτη φορά μια γεννήτρια κώδικα Java, θα βάλετε το αρχείο απευθείαςΕγγραφή σε αρχείο UTF-8 που περιέχει την ετικέτα BOMΑυτό θα οδηγήσει σε σφάλματα συσκευασίας, ως εξής:
Παράνομοι χαρακτήρες: '\ufeff'
Πώς μπορώ να χρησιμοποιήσω το .NET / C# για να προσδιορίσω εάν ένα αρχείο περιέχει ετικέτες BOM; , ο κωδικός έχει ως εξής:
Συνάδελφοι, συνημμένοιΜετατρέπει τη μορφή UTF-8 BOM σε μορφή UTF-8 (χωρίς ετικέτες BOM), ο πλήρης κώδικας έχει ως εξής:
(Τέλος)
|