UTF-8 ile BOM olmadan UTF-8 arasında ne fark vardır? Hangisi daha iyi?
UTF-8 BOM, okuyucunun bir dosyanın UTF-8'de kodlanmış olduğunu daha güvenilir bir şekilde tahmin etmesini sağlayan bir metin akışının (EF BB BF) başlangıcındaki Bayt dizisidir.
Normalde, BOM bir kodlamanın endianlığını belirtmek için kullanılır, ancak endianlık UTF-8 ile ilgisiz olduğundan, BOM gereksizdir.
Unicode standardına]1 göre, UTF-8 dosyaları için BOM önerilmemektedir:
2.6 Kodlama Şemaları
... UTF-8 için bir BOM kullanımı ne gereklidir ne de önerilir, ancak olabilir UTF-8 verilerinin diğer verilerden dönüştürüldüğü bağlamlarda karşılaşılır BOM kullanan veya BOM'un UTF-8 olarak kullanıldığı kodlama formları imza. Bölüm 16.8.'deki "Bayt Sırası İşareti" alt bölümüne bakın, Özel İşaretler*](http://www.unicode.org/versions/Unicode5.0.0/ch16.pdf), daha fazla bilgi için.
BOM'suz UTF-8'in BOM'u yoktur, bu da onu BOM'lu UTF-8'den daha iyi yapmaz, ancak dosyanın tüketicisinin dosyanın UTF-8 kodlu olup olmadığını bilmesi gerektiği (veya bilmekten fayda sağlayacağı) durumlar hariç.
BOM genellikle kodlamanın endianlığını belirlemek için kullanışlıdır ve çoğu kullanım durumu için gerekli değildir.
Ayrıca, BOM, bunu bilmeyen veya önemsemeyen tüketiciler için gereksiz gürültü/ağrı olabilir ve kullanıcının kafa karışıklığına neden olabilir.
http://en.wikipedia.org/wiki/Byte-order_mark adresinden:
Bayt sırası işareti (BOM) bir Unicode işaret etmek için kullanılan > karakteri bir metin dosyasının endianlığı (bayt sırası) veya akış. Kod noktası U+FEFF'dir. BOM kullanımı isteğe bağlıdır ve kullanılırsa, metnin başında yer almalıdır akış. Özel kullanımının ötesinde bayt sırası göstergesi, BOM karakteri ayrıca aşağıdakilerden hangisini gösterebilir çeşitli Unicode gösterimleri metin şu şekilde kodlanmıştır.
Dosyanızda her zaman bir BOM kullanmak, UTF-8 ve BOM'u destekleyen bir düzenleyicide her zaman doğru şekilde açılmasını sağlayacaktır.
Benim BOM'un yokluğuyla ilgili asıl sorunum şu. Diyelim ki şunları içeren bir dosyamız var:
abc
BOM olmadan bu, çoğu düzenleyicide ANSI olarak açılır. Dolayısıyla, bu dosyanın başka bir kullanıcısı dosyayı açar ve örneğin bazı yerel karakterler ekler:
abg-αβγ
Oops... Şimdi dosya hala ANSI dilinde ve tahmin edin ne oldu, "αβγ" 6 bayt değil, 3 bayt yer kaplıyor. Bu UTF-8 değil ve bu daha sonra geliştirme zincirinde başka sorunlara neden oluyor.