Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 14853|Răspunde: 0

[Sursă] Probleme cu prefixul BOM întâlnite la citirea fișierelor Unicode (UTF-8 etc.) în Java

[Copiază linkul]
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 Jackson
Următor:Software de codare a barelor, barman!
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com