Давайте немного вернемся назад ...
В текстовых типах данных Java используется кодировка символов UTF-16 набора символов Unicode. (Как и VB4 / 5/6 / A / Script, JavaScript, .NET,….) Вы можете увидеть это в различных операциях, которые вы выполняете со строковым API: индексация, длина,….
Библиотеки поддерживают преобразование типов текстовых данных и байтовых массивов с использованием различных кодировок. Некоторые из них классифицируются как «Extended ASCII», но указывается, что это очень плохая замена для именования фактически используемой кодировки символов.
Некоторые операционные системы позволяют пользователю назначать кодировку символов по умолчанию. (Большинство пользователей, тем не менее, не знают или не заботятся.) Java пытается это понять. Это полезно только тогда, когда программа понимает, что ввод от пользователя - это кодировка символов или что вывод должен быть. В этом столетии пользователи, работающие с текстовыми файлами, предпочитают использовать определенную кодировку, передавать их без изменений по всем системам, не ценят преобразования с потерями и, следовательно, не используют эту концепцию. С точки зрения программы, это никогда не то, что вы хотите, если это не то, что вы хотите.
Если преобразование будет с потерями, у вас есть выбор замены символа (например, «?»), Его опускание или исключение.
Кодировка символов - это карта между кодовой точкой (целым числом) набора символов и одной или несколькими кодовыми единицами в соответствии с определением кодировки. Кодовой единицей является фиксированный размер, и количество кодовых единиц, необходимых для кодовой точки, может варьироваться в зависимости от кодовой точки.
В библиотеках, как правило, бесполезно иметь массив единиц кода, поэтому они предпринимают дальнейшие шаги по преобразованию в / из массива байтов. byte
значения варьируются от -128 до 127, однако это интерпретация Java как 8-битные целые числа, дополняющие два. Поскольку под байтами понимается кодировка текста, значения будут интерпретироваться в соответствии с правилами кодировки символов.
Поскольку некоторые кодировки Unicode имеют кодовые единицы длиной более одного байта, порядок байтов становится важным. Итак, на уровне байтового массива есть UTF-16 Big Endian и UTF-16 Little Endian. При передаче текстового файла или потока вы отправляете байты, а также имеете общие знания о кодировке. Эти «метаданные» необходимы для понимания. Итак, UTF-16BE или UTF-16LE, например. Чтобы сделать это немного проще, Unicode позволяет некоторым метаданным в начале файла или потока указывать порядок байтов. Это называется меткой порядка байтов (BOM). Таким образом, внешние метаданные могут совместно использовать кодировку (скажем, UTF-16), в то время как внутренние метаданные разделяют порядок байтов. Юникод позволяет присутствовать в спецификации, даже если порядок следования байтов не имеет значения, например, UTF-8. Таким образом, если понимание состоит в том, что байты являются текстовым кодированием с любой кодировкой Unicode и присутствует спецификация, тогда очень просто выяснить, какая это кодировка Unicode и каков порядок байтов, если он относительный.
1) Вы видите спецификацию в некоторых ваших выходах кодировки Unicode.
2) È отсутствует в наборе символов ASCII. Что бы произошло в этом случае? Я часто предпочитаю исключение.
3) Система, которую вы использовали для своей учетной записи во время ваших тестов, могла иметь кодировку UTF-8 в качестве кодировки символов по умолчанию. Это важно для того, как вы хотите, и кодировала ваши текстовые файлы на этом система