Это только для метода writeUTF
объекта DataOutputStream, а не для обычных преобразованных потоков (OutputStreamWriter или подобных).
Это означает, что если у вас есть строка "\u0000"
, она будет закодирована как 0xC0 0x80
вместо просто 0x00
.
И наоборот, эта последовательность 0xB0 0x80
, которая никогда не встречается в обычных строках UTF-8, представляет собой нулевой символ.
Кроме того, документация, на которую вы ссылаетесь, кажется,со времени, когда Unicode все еще был 16-битным набором символов - в настоящее время он также позволяет символы более 0xFFFF, которые будут представлены двумя значениями Java char
каждый (в формате UTF-16, суррогатная пара), и потребуется 4байт в UTF-8, если я правильно рассчитал.Однако я уверен, что реализация здесь - похоже, они просто написаны в формате CESU-8 (например, две 3-байтовые последовательности, каждая из которых соответствует суррогату UTF-16, которые вместе даютодин символ Unicode).Вам также придется позаботиться об этом.
Если вы используете Java, проще всего было бы использовать DataInputStream для чтения этого в строку, а затем преобразовать его (с помощью getBytes("UTF-8")
или OutputStreamWriterк реальным данным UTF-8.