Я пытаюсь распознать спецификацию для UTF-8 при чтении файла.Конечно, Java-файлы любят иметь дело с 16-битными символами, а символы спецификации имеют восьмибитные байты.
Мой тестовый код выглядит следующим образом:
public void testByteOrderMarks() {
System.out.println("test byte order marks");
byte[] bytes = {(byte) 0xEF, (byte) 0xBB, (byte) 0xBF, (byte) 'a', (byte) 'b',(byte) 'c'};
String test = new String(bytes, Charset.availableCharsets().get("UTF-8"));
System.out.printf("test len: %s value %s\n", test.length(), test);
String three = test.substring(0,3);
System.out.printf("len %d >%s<\n", three.length(), three);
for (int i = 0; i < test.length();i++) {
byte b = bytes[i];
char c = test.charAt(i);
System.out.printf("b: %s %x c: %s %x\n", (char) b, b, c, (int) c);
}
}
и результат:
метки порядка следования байтов
test len: 4 значения? Abc
len 3>? Ab <<br> b:?ef> c:?feff
b:?bb c: a 61
b:?bf c: b 62
b: a 61 c: c 63
Я не могу понять, почему длина "теста" равна 4, а не 6. Я не могу понять,почему я не беру каждый 8-битный байт для сравнения.
Спасибо