Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 14853|Risposta: 0

[Fonte] Problemi con il prefisso BOM riscontrati durante la lettura di file Unicode (UTF-8, ecc.) in Java

[Copiato link]
Pubblicato su 14/01/2019 16:26:17 | | |
Il problema dei primi caratteri BOM incontrati durante la lettura di file Unicode (UTF-8, ecc.) in Java e come gestirli

I file di testo creati con un editor di testo su Windows avranno un ID BOM aggiunto all'intestazione del file (il primo carattere) se scegli di salvarli in un formato Unicode come UTF-8.

Questa identificazione non viene rimossa quando il file viene letto in Java, e String.trim() non può essere rimosso. Se usi readLine() per leggere la prima riga e memorizzarla nella Stringa, la lunghezza della Stringa sarà 1 più grande di quella che vedi, e il primo carattere è questa lista di riferimenti.

Questo può causare qualche problema, ad esempio quando si legge un file ini, se vuoi capire se la prima riga inizia con "[", non puoi giudicare correttamente.

Fortunatamente, quando Java legge file Unicode, cambia uniformemente la lista di materiali in "\uFEFF", così puoi risolverlo manualmente (dopo il giudizio, usa substring() o sostituisci() per rimuovere questa lista di comando):

Tuttavia,Questo approccio non è perfettoSe il file jar generato viene eseguito su Windows, c'è comunque un problema. La soluzione definitiva è utilizzare il BOMInputStream fornito da apache commons io:

Cos'è la BOM?


BOM = Marchio dell'ordine dei byte
La BOM è il metodo raccomandato per contrassegnare l'ordine dei byte nella specifica Unicode. Ad esempio, per UTF-16, se il ricevitore riceve una BOM di FEFF, indica che il flusso di byte è Big-Endian; Se viene ricevuto FFFE, indica che il flusso di byte è Little-Endian.
UTF-8 non richiede una lista di materiali per indicare l'ordine dei byte, ma può essere usato per indicare "Sono codificato in UTF-8". La codifica UTF-8 della BOM è EF BB BF (come si vede aprendo il testo con UltraEdit e passando a esadecimale). Quindi, se il ricevitore riceve un flusso di byte che inizia con EF BB BF, sa che è codifica UTF-8.





Precedente:Soluzioni di errore comuni di Jackson
Prossimo:Software di codice a barre Bartender!
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com