декодировать кодировать между строкой и байтом в Java - PullRequest
0 голосов
/ 14 апреля 2010
byte[] bytes = new byte[] { 1, -1 };
System.out.println(Arrays.toString(new String(bytes, "UTF-8").getBytes("UTF-8")));
System.out.println(Arrays.toString(new String(bytes, "ISO-8859-1").getBytes("ISO-8859-1")));

выход:

[1, -17, -65, -67]
[1, -1]

почему ???

Ответы [ 3 ]

6 голосов
/ 14 апреля 2010

Ваш байтовый массив не является допустимой строкой в ​​кодировке UTF-8 ... поэтому строка, которую вы получаете из

new String(bytes, "UTF-8")

содержит U + 0001 (для первого байта) и U + FFFD для обозначения неверных данных во втором байте. Когда эта строка закодирована с использованием UTF-8, вы получите показанный шаблон байтов.

По сути, вы не должны пытаться интерпретировать произвольные двоичные данные, как если бы они были закодированы в определенной кодировке. Если вы хотите представить произвольные двоичные данные в виде строки, используйте что-то вроде base64.

2 голосов
/ 14 апреля 2010

-1 не является допустимым символом в кодировке UTF-8. [-17, -65, -67] скорее всего является байтовым представлением заменяющего символа , который подставляется.

0 голосов
/ 14 апреля 2010

String не является контейнером для двоичных данных. Это контейнер для символа. -1 не является допустимым значением для символа. Нет никаких причин, почему то, что вы делаете, должно работать. Ergo, не делай этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...