MK pirmo rakstzīmju problēma, kas radusies, lasot Unicode failus (UTF-8 utt.) Java, un kā ar tām rīkoties
Teksta failiem, kas izveidoti, izmantojot Windows teksta redaktoru, faila galvenei (pirmajai rakstzīmei) tiks pievienots MK ID, ja izvēlaties tos saglabāt unikoda formātā, piemēram, UTF-8.
Šī identifikācija netiek noņemta, kad fails tiek lasīts Java, un String.trim() nevar noņemt. Ja izmantojat readLine(), lai lasītu pirmo rindiņu un saglabātu to virknē, virknes garums būs par 1 lielāks nekā redzamais, un pirmā rakstzīme ir šī MK.
Tas var radīt problēmas, piemēram, lasot ini failu, ja vēlaties noteikt, vai pirmā rindiņa sākas ar "[", jūs nevarat pareizi spriest.
Par laimi, kad Java lasa Unicode failus, tā vienmērīgi maina MK uz "\uFEFF", lai jūs varētu to atrisināt manuāli (pēc sprieduma izmantojiet substring() vai replace(), lai noņemtu šo MK):
Tomēr,Šī pieeja nav ideālaJa ģenerētais jar fails darbojas operētājsistēmā Windows, problēma joprojām pastāv. Galvenais risinājums ir izmantot BOMInputStream, ko nodrošina apache commons io:
Kas ir MK?
MK = baitu pasūtījuma atzīme MK ir ieteicamā metode, lai atzīmētu baitu secību unikoda specifikācijā. Piemēram, UTF-16, ja uztvērējs saņem FEFF MK, tas norāda, ka baitu plūsma ir Big-Endian; Ja tiek saņemts FFFE, tas norāda, ka baitu straume ir Little-Endian. UTF-8 nav nepieciešama MK, lai norādītu baitu secību, bet to var izmantot, lai norādītu "Es esmu kodēts UTF-8". MK UTF-8 kodējums ir EF BB BF (kā redzams, atverot tekstu ar UltraEdit un pārslēdzoties uz heksadecimālu). Tātad, ja uztvērējs saņem baitu plūsmu, kas sākas ar EF BB BF, viņi zina, ka tas ir UTF-8 kodējums.
|