На самом деле, если вы хотите получить тот же результат с вызовом toString()
, укажите UTF-16_LE
в качестве кодировки charset:
bsh % System.out.println("\u0080".getBytes("UTF-16LE")[0]);
-128
Строки Java внутренне кодируются как UTF-16, и так какмы хотим, чтобы младший байт был таким же, как для броска char -> byte, здесь мы используем младший порядок байтов.Big endian тоже работает, если мы изменим индекс массива:
bsh % System.out.println("\u0080".getBytes("UTF-16BE")[1]);
-128