Masalah karakter BOM pertama yang ditemui saat membaca file Unicode (UTF-8, dll.) di Java dan cara mengatasinya
File teks yang dibuat dengan editor teks di Windows akan memiliki ID BOM yang ditambahkan ke header file (karakter pertama) jika Anda memilih untuk menyimpannya dalam format Unicode seperti UTF-8.
Identifikasi ini tidak dihapus saat file dibaca di Java, dan String.trim() tidak dapat dihapus. Jika Anda menggunakan readLine() untuk membaca baris pertama dan menyimpannya di String, panjang String akan menjadi 1 lebih besar dari yang Anda lihat, dan karakter pertama adalah BOM ini.
Hal ini dapat menyebabkan beberapa masalah, seperti saat membaca file ini, jika Anda ingin mengetahui apakah baris pertama dimulai dengan "[", Anda tidak dapat menilai dengan benar.
Untungnya, ketika Java membaca file Unicode, secara seragam mengubah BOM menjadi "\uFEFF", sehingga Anda dapat menyelesaikannya secara manual (setelah penilaian, gunakan substring() atau replace() untuk menghapus BOM ini):
Namun,Pendekatan ini tidak sempurnaJika file jar yang dihasilkan berjalan di bawah Windows, masih ada masalah. Solusi utama adalah menggunakan BOMInputStream yang disediakan oleh apache commons io:
Apa itu BOM?
BOM = Tanda Pesanan Byte BOM adalah metode yang direkomendasikan untuk menandai urutan byte dalam spesifikasi Unicode. Misalnya, untuk UTF-16, jika penerima menerima BOM FEFF, ini menunjukkan bahwa aliran byte adalah Big-Endian; Jika FFFE diterima, ini menunjukkan bahwa bytestream adalah Little-Endian. UTF-8 tidak memerlukan BOM untuk menunjukkan urutan byte, tetapi dapat digunakan untuk menunjukkan "Saya dikodekan UTF-8". Pengkodean UTF-8 BOM adalah EF BB BF (seperti yang terlihat dengan membuka teks dengan UltraEdit dan beralih ke heksadesimal). Jadi jika penerima menerima aliran byte yang dimulai dengan EF BB BF, mereka tahu itu adalah pengkodean UTF-8.
|