KS pirmųjų simbolių problema, su kuria susiduriama skaitant Unicode failus (UTF-8 ir kt.) Java, ir kaip su jais elgtis
Teksto failų, sukurtų naudojant Windows teksto rengyklę, KS ID bus pridėtas prie failo antraštės (pirmasis simbolis), jei pasirinksite juos įrašyti Unicode formatu, pvz., UTF-8.
Šis identifikavimas nepašalinamas, kai failas skaitomas Java, o String.trim() pašalinti negalima. Jei naudosite readLine(), kad perskaitytumėte pirmąją eilutę ir išsaugotumėte ją eilutėje, eilutės ilgis bus 1 didesnis nei matote, o pirmasis simbolis yra ši KS.
Tai gali sukelti tam tikrų problemų, pvz., skaitant ini failą, jei norite pasakyti, ar pirmoji eilutė prasideda "[", negalite teisingai spręsti.
Laimei, kai Java skaito Unicode failus, ji tolygiai pakeičia KS į "\uFEFF", todėl galite ją išspręsti rankiniu būdu (po sprendimo naudokite substring() arba replace(), kad pašalintumėte šią KS):
TačiauŠis požiūris nėra tobulasJei sugeneruotas jar failas veikia sistemoje Windows, vis tiek yra problema. Galutinis sprendimas yra naudoti BOMInputStream, kurį teikia apache commons io:
Kas yra KS?
KS = baitų užsakymo ženklas KS yra rekomenduojamas būdas žymėti baitų tvarką Unicode specifikacijoje. Pavyzdžiui, UTF-16, jei imtuvas gauna FEFF KS, tai rodo, kad baitų srautas yra Big-Endian; Jei gaunamas FFFE, tai rodo, kad baitų srautas yra Little-Endian. UTF-8 nereikalauja KS baitų tvarkai nurodyti, tačiau ji gali būti naudojama nurodant "Aš esu užkoduotas UTF-8". KS UTF-8 kodavimas yra EF BB BF (kaip matyti atidarius tekstą naudojant UltraEdit ir perjungus į šešioliktainį). Taigi, jei imtuvas gauna baitų srautą, prasidedantį EF BB BF, jie žino, kad tai UTF-8 kodavimas.
|