Кодировка UCS-2 эффективно UTF-16
на Android 8.x и 9.0 .На Android 8.1, android engineering следующие изменения в кодировке UTF-16.
Обратите внимание, что маркер спецификации (-2, -1) включен в вывод.Если вам нужен стабильный результат на устройстве, вы можете использовать UTF-16BE по желанию.Ниже приведены подробности изменения поведения.
UTF-16 Байт-порядок упорядочения выходных данных Charset
Кодировка UTF-16
(получена через java.nio.charset.Charset.forName("UTF-16")
или java.nio.charset.StandardCharsets.UTF_16
) теперь кодирует строки в байты UTF-16 с прямым порядком байтов с помощью маркера порядка байтов, как утверждает Javadoc.Ранее он кодировался как little-endian с маркером порядка байтов, что противоречит документации.
Это также меняет результат вызова getBytes("UTF-16")
для строки.Это не имеет значения для кода, который использует кодировку UTF-16
для кодирования и декодирования строк, поскольку декодирование подчиняется метке порядка байтов.Это влияет только на код, который использует кодировку UTF-16
для кодирования, а затем предполагает, что результирующие байты имеют младший порядок, например, декодируя их с помощью механизма, игнорирующего маркер порядка байтов.
Пользователи, желающиекодировать как little-endian с маркером порядка байтов можно с помощью x-UTF-16LE-BOM
Charset.(Обратите внимание, что этот Charset не должен использоваться для декодирования байтов, если только они не известны как последовательности с прямым порядком байтов.)