Что это за первые три символа внутри xml

#java #arrays #controls #byte #special-characters

#java #массивы #элементы управления #байт #специальные символы

Вопрос:

Почему я получил следующий вывод, прочитав содержимое файла в виде массива байтов с помощью Java?

 File f = new File( "exampleData.xml" );
byte[] data = getBytesFromFile("data.xml");
for (byte zeichen : data) {
    char zzeichenCharacter = (char)zeichen;
    System.out.println(zzeichenCharacter   "  : "   String.valueOf(zeichen));
}
  

Вывод:

 ￯  : -17
ᄏ  : -69
﾿  : -65
<  : 60
?  : 63
  

И когда я копирую содержимое из файла exampleData.xml во второй файл с именем exampleDataCopy.xml и, используя тот же код выше, я получил другой результат:

 <  : 60
?  : 63
x  : 120
m  : 109
l  : 108
  

Комментарии:

1. Какую кодировку имеют файлы?

2. КСТАТИ, String.valueOf(0xff amp; zeichen) выдал бы байт без знака, что, вероятно, является более «естественным» способом печати байта.

Ответ №1:

Первые три байта представляют собой кодировку UTF-8 знака порядка байтов.

Шестнадцатеричное представление EF BB BF .

Вы должны прочитать свой файл как UTF-8 вместо того, чтобы обрабатывать его побайтно.