Problemet med de første BOM-tegnene man møter når man leser Unicode-filer (UTF-8, osv.) i Java og hvordan man håndterer dem
Tekstfiler laget med en teksteditor i Windows vil få en BOM-ID lagt til i filheaderen (det første tegnet) hvis du velger å lagre dem i Unicode-format som UTF-8.
Denne identifikasjonen fjernes ikke når filen leses i Java, og String.trim() kan ikke fjernes. Hvis du bruker readLine() for å lese den første linjen og lagrer den i strengen, vil lengden på strengen være én større enn det du ser, og det første tegnet er denne listelisten.
Dette kan skape problemer, for eksempel når du leser en ini-fil, hvis du vil vite om første linje starter med "[", kan du ikke bedømme riktig.
Heldigvis, når Java leser Unicode-filer, endrer det ensartet stykklisten til "\uFEFF", så du kan løse det manuelt (etter vurdering, bruk substring() eller replace() for å fjerne denne stykklisten):
Men,Denne tilnærmingen er ikke perfektHvis den genererte jar-filen kjører under Windows, er det fortsatt et problem. Den ultimate løsningen er å bruke BOMInputStream levert av apache commons io:
Hva er BOM?
BOM = Byte Order Stykklisten er den anbefalte metoden for å markere rekkefølgen på bytes i Unicode-spesifikasjonen. For eksempel, for UTF-16, hvis mottakeren mottar en BOM av FEFF, indikerer det at bytestrømmen er Big-Endian; Hvis FFFE mottas, indikerer det at bytestrømmen er Little-Endian. UTF-8 krever ikke en BOM for å indikere byterekkefølge, men den kan brukes til å indikere «Jeg er UTF-8-kodet». UTF-8-kodingen av BOM er EF BB BF (som sett ved å åpne tekst med UltraEdit og bytte til heksadesimal). Så hvis mottakeren mottar en bytestrøm som starter med EF BB BF, vet de at det er UTF-8-koding.
|