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.
|