Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 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() для чтения первой строки и храните её в строке, длина строки будет на один больше того, что вы видите, и первый символ — это этот 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