Нет текста, кроме закодированного текста.
Каждая программа, читающая текстовый файл или поток, должна знать и использовать ту же кодировку символов, что и писатель.
Адаптивная кодировка символов по умолчанию является решением 90-х годов для проблемы 70-х и 80-х годов (приблизительно).Сегодня обычно лучше избегать конструкторов и методов, которые используют значение по умолчанию, и в PowerShell добавьте аргумент кодирования, где это необходимо для управления вводом или выводом.
Чтобы предотвратить потерю данных, вы можете использовать набор символов Юникод повсюду.UTF-8 является наиболее распространенным для файлов и потоков.(PowerShell и Java используют UTF-16 для текстовых типов данных.)
Но вам нужно начать с того, что вы знаете, какова кодировка символов текстового файла.Если вы не знаете эти метаданные, это потеря данных прямо здесь.
Юникод предусматривает, что если известно, что файл или поток является Юникодом, он может начинаться с метаданных, называемых спецификацией.Спецификация указывает, какая конкретная кодировка символов Unicode используется и каков порядок байтов (для кодировок символов с единицами кода длиннее, чем байт).[Это положение не решает никаких проблем, с которыми я сталкивался, и вызывает собственные проблемы.]
(Кодировка символов на абстрактном уровне представляет собой карту между кодовыми точками и единицами кода и поэтому независимапорядка байтов. На практике кодирование символов выполняет дополнительный этап сериализации / десериализации блоков кода в / из байтовых последовательностей. Таким образом, иногда использование или отсутствие использования спецификации входит в название или описание кодировки. Также может быть указана спецификацияв качестве подписи. Ergo, "UTF-8 с подписью.")
В качестве метаданных, при необходимости, следует использовать спецификацию, если она присутствует, и всегда отбрасывать при вводе текста в текстовые типы данных.К сожалению, стандартные библиотеки Java не сбрасывают спецификацию.Для этого вы можете использовать популярные библиотеки или около десятка строк собственного кода.
Опять же, начните с знания кодировки символов текстового файла и вставки этих метаданных в обработку в качестве аргумента.