Java'da Unicode dosyalarını (UTF-8 vb.) okurken karşılaşılan BOM ilk karakter sorunu ve bunlarla nasıl başa çıkılacağı
Windows'ta metin düzenleyiciyle oluşturulan metin dosyalarına, UTF-8 gibi Unicode formatında kaydetmeyi seçerseniz, dosya başlığına (ilk karaktere) BOM ID eklenecektir.
Bu tanımlama dosya Java'da okunduğunda kaldırılmaz ve String.trim() kaldırılamaz. İlk satırı okumak için readLine() kullanırsanız ve onu String'de saklarsanız, Dizinin uzunluğu gördüğünüzden 1 kat büyük olur ve ilk karakter bu BOM'dur.
Bu bazı sorunlara yol açabilir, örneğin ini dosyasını okurken, ilk satırın "[" ile başladığını anlamak istiyorsanız, doğru şekilde karar veremezsiniz.
Neyse ki, Java Unicode dosyalarını okuduğunda BOM'u "\uFEFF" olarak eşit şekilde değiştirir, böylece manuel olarak çözebilirsiniz (yargıdan sonra substring() veya replace() kullanarak bu BOM'u kaldırabilirsiniz):
Ancak,Bu yaklaşım mükemmel değildirOluşturulan jar dosyası Windows altında çalışıyorsa bile bir sorun var. Nihai çözüm, apache commons io tarafından sağlanan BOMInputStream'i kullanmaktır:
BOM nedir?
BOM = Bayt Sırası İşareti BOM, Unicode spesifikasyonunda bayt sırasını işaretlemek için önerilen yöntemdir. Örneğin, UTF-16 için, alıcı FEFF BOM alırsa, bayt akışının Big-Endian olduğunu gösterir; FFFE alınırsa, bayt akışının Little-Endian olduğunu gösterir. UTF-8, bayt sırasını belirtmek için BOM gerektirmez, ancak "UTF-8 kodluydum" diye belirtmek için kullanılabilir. BOM'un UTF-8 kodlaması EF BB BF'DIR (metin UltraEdit ile açılıp onaltılığa geçildiğinde görüldüğü gibi). Yani alıcı EF BB BF ile başlayan bir bayt akışı alırsa, bunun UTF-8 kodlaması olduğunu bilir.
|