Problem prvih znakov BOM, ki se pojavijo pri branju Unicode datotek (UTF-8 itd.) v Javi, in kako se z njimi spoprijeti
Besedilne datoteke, ustvarjene z urejevalnikom besedila v Windows, bodo imele dodano ID BOM v glavo datoteke (prvi znak), če jih želite shraniti v Unicode formatu, kot je UTF-8.
Ta identifikacija se ne odstrani, ko se datoteka bere v Javi, in String.trim() ni mogoče odstraniti. Če uporabiš readLine() za branje prve vrstice in jo shraniš v niz, bo dolžina niza za 1 večja od tiste, ki jo vidiš, prvi znak pa je ta BOM.
To lahko povzroči nekaj težav, na primer pri branju ini datoteke, če želite ugotoviti, ali se prva vrstica začne z "[", ne morete pravilno presoditi.
Na srečo, ko Java bere Unicode datoteke, enakomerno spremeni BOM v "\uFEFF", tako da ga lahko ročno rešite (po presoji, uporabite substring() ali replace() za odstranitev tega BOM):
Vendar pa,Ta pristop ni popolnČe generirana jar datoteka teče pod Windows, je težava še vedno prisotna. Končna rešitev je uporaba BOMInputStream, ki ga zagotavlja apache commons io:
Kaj je BOM?
BOM = oznaka vrstnega reda bajtov BOM je priporočena metoda označevanja vrstnega reda bajtov v Unicode specifikaciji. Na primer, za UTF-16, če sprejemnik prejme BOM FEFF, to pomeni, da je bajtni tok Big-Endian; Če je FFFE sprejet, to pomeni, da je bajtni tok Little-Endian. UTF-8 ne zahteva BOM za označevanje vrstnega reda bajtov, lahko pa označi "I am UTF-8 kodiran". UTF-8 kodiranje BOM-a je EF BB BF (kar vidimo z odpiranjem besedila z UltraEdit in preklopom na šestnajstiško). Torej, če sprejemnik prejme bajtni tok, ki se začne z EF BB BF, ve, da gre za UTF-8 kodiranje.
|