Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 14853|Отговор: 0

[Източник] Проблеми с префикса BOM, които се появяват при четене на Unicode файлове (UTF-8 и др.) в Java

[Копирай линк]
Публикувано в 14.01.2019 г. 16:26:17 ч. | | |
Проблемът с първите BOM знаци, които се срещат при четене на Unicode файлове (UTF-8 и др.) в Java, и как да се справим с тях

Текстовите файлове, създадени с текстов редактор в Windows, ще имат добавен BOM ID към заглавието на файла (първия знак), ако решите да ги запазите в Unicode формат като UTF-8.

Тази идентификация не се премахва, когато файлът се чете на Java, а String.trim() не може да бъде премахнат. Ако използваш readLine(), за да прочетеш първия ред и го съхраниш в String, дължината на String ще бъде с 1 по-голяма от това, което виждате, а първият знак е този BOM.

Това може да създаде проблеми, например при четене на ini файл, ако искате да разберете дали първият ред започва с "[", не можете да прецените правилно.

За щастие, когато Java чете Unicode файлове, тя еднородно променя BOM на "\uFEFF", така че можете да го решите ръчно (след преценка, използвайте substring() или replace(), за да премахнете този BOM):

Въпреки това,Този подход не е перфектенАко генерираният jar файл работи под Windows, все още има проблем. Крайното решение е използването на BOMInputStream, предоставен от apache commons io:

Какво е BOM?


BOM = Маркировка за байтов ред
BOM е препоръчителният метод за маркиране на реда на байтовете в спецификацията на Unicode. Например, за UTF-16, ако приемникът получи BOM на FEFF, това показва, че байтовият поток е Big-Endian; Ако се получи FFFE, това означава, че байтовият поток е Little-Endian.
UTF-8 не изисква BOM за показване на реда на байтовете, но може да се използва за означаване на "Аз съм UTF-8 кодиран". UTF-8 кодирането на BOM е EF BB BF (както се вижда при отваряне на текст с UltraEdit и превключване на шестнадесетично). Така че, ако приемникът получи байтов поток, който започва с EF BB BF, той знае, че това е UTF-8 кодиране.





Предишен:Често срещани решения за грешки на Джаксън
Следващ:Барман за софтуер за баркодиране!
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com