Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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() для читання першого рядка і зберігаєте його в рядку, довжина рядка буде на 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, це означає, що потік байтів є Літтл-Ендіан.
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