#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 вместо того, чтобы обрабатывать его побайтно.