Как сделать блокнот для сохранения текста в UTF-8 без спецификации?

У меня есть файл CSV с особыми акцентами и сохранение его в Блокноте, выбирая кодировку UTF-8. Когда я читаю файл с помощью Java, он также считывает символы спецификации.

Поэтому я хочу сохранить этот файл в формате UTF-8 без добавления спецификации в блокнот.

В противном случае есть встроенный класс в Java, который устраняет символы спецификации, которые присутствуют в начале, при чтении содержимого в файле?

Ответ 1

  • Используйте Notepad ++ - бесплатно и намного лучше, чем Блокнот. Это поможет сохранить текст без спецификации с помощью Enconding > Encode в UTF-8 без спецификации: Screenshot of the Notepad++ Menubar > Encoding > Encode in UTF-8 without BOM menu in Notepad++ v6.7.9.2

  • Когда я столкнулся с этой проблемой в Java, я не нашел никакой библиотеки для анализа этих первых трех байтов (BOM). Поэтому мой совет:

    • Используйте PushbackInputStream(in, 3).
    • Прочитайте первые три байта
    • Если это не BOM (EF BB BF), нажмите их обратно
    • Обработать поток как UTF-8

Ответ 2

Вместо этого используйте Notepad ++. См. Мой личный пост в блоге. Из Notepad ++ выберите "Кодирование", затем "Кодировать в UTF-8 без спецификации".

Ответ 3

Я только что узнал из этого Stack пост переполнения, поскольку @Martin-geisler указывает, что вы можете сохранять файлы без спецификации в Windows Notepad, выбор ANSI в качестве кодировки.

Я предполагаю, что для более продвинутых целей это не сработает, потому что полученный файл, вероятно, не является конечной кодировкой, но на самом деле ANSI; но я протестировал и подтвердил, что это работает, чтобы сохранить очень маленький .php script без спецификации, используя только Блокнот.

Я узнал длинный и трудный способ, что Блокнот Windows не является истинным редактором, хотя я хотел бы указать другим, что, несмотря на это, он вводит в заблуждение, когда вы набираете "editor" на более новых машинах Windows, по крайней мере, на одном из моих.

В настоящее время я использую Emacs и другие редакторы для решения этой проблемы.

Ответ 5

Ответ: совсем нет. Блокнот не может этого сделать.

В Java вы можете просто пропустить первый байт в InputStream и сделать.

Ответ 6

Возможно, вы захотите попробовать Notepad2 или Notepad ++. У этих заметок "Блокнот" есть возможность выбрать, выводить ли спецификацию.

Что касается Java-решения, насколько я знаю, Java не понимает стандарт UTF-8. Я googled и нашел Нарушение Java UTF-8 и Unicode нарушено - используйте это исправление, которое может быть решением.

Ответ 7

Мы используем утилиту BOMStripperInputStream.java, чтобы удалить спецификацию с нашего ввода, если она есть.