|
|
Postat pe 14.01.2019 16:26:17
|
|
|

Problema caracterelor BOM întâmpinate la citirea fișierelor Unicode (UTF-8 etc.) în Java și cum să le gestionezi
Fișierele text create cu un editor de text în Windows vor avea un ID BOM adăugat în antetul fișierului (primul caracter) dacă alegi să le salvezi într-un format Unicode, cum ar fi UTF-8.
Această identificare nu este eliminată atunci când fișierul este citit în Java, iar String.trim() nu poate fi eliminat. Dacă folosești readLine() pentru a citi prima linie și a o stoca în String, lungimea Stringului va fi cu 1 mai mare decât cea pe care o vezi, iar primul caracter este acest BOM.
Acest lucru poate cauza unele probleme, cum ar fi atunci când citești un fișier ini, dacă vrei să-ți dai seama dacă prima linie începe cu "[", nu poți judeca corect.
Din fericire, când Java citește fișiere Unicode, schimbă uniform BOM-ul în "\uFEFF", astfel încât poți rezolva manual (după judecată, folosește substring() sau replace() pentru a elimina această BOM):
Totuși,Această abordare nu este perfectăDacă fișierul jar generat rulează sub Windows, tot există o problemă. Soluția supremă este să folosești BOMInputStream-ul oferit de apache commons io:
Ce este BOM?
BOM = Marcaj de ordine a octeților BOM-ul este metoda recomandată de a marca ordinea octeților în specificația Unicode. De exemplu, pentru UTF-16, dacă receptorul primește un BOM de FEFF, acesta indică faptul că fluxul de octeți este Big-Endian; Dacă FFFE este recepționat, indică faptul că fluxul de octeți este Little-Endian. UTF-8 nu necesită un BOM pentru a indica ordinea octeților, dar poate fi folosit pentru a indica "Sunt codificat UTF-8". Codarea UTF-8 a BOM-ului este EF BB BF (așa cum se vede prin deschiderea textului cu UltraEdit și trecerea la hexazecimal). Deci, dacă receptorul primește un flux de octeți care începe cu EF BB BF, știe că este codare UTF-8.
|
Precedent:Soluții comune de eroare JacksonUrmător:Software de codare a barelor, barman!
|