Как преобразовать массив байтов для строкового представления и наоборот?

Вы используете это где-нибудь?

 Response.Status="404 Page Not Found"
228
задан peterh says reinstate Monica 18 April 2018 в 06:49
поделиться

6 ответов

Ваш байтовый массив должен иметь некоторую кодировку . Кодировка не может быть ASCII, если у вас есть отрицательные значения. Как только вы это выясните, вы можете преобразовать набор байтов в String, используя:

byte[] bytes = {...}
String str = new String(bytes, "UTF-8"); // for UTF-8 encoding

Существует множество кодировок, которые вы можете использовать, посмотрите на класс Charset в Sun javadocs .

350
ответ дан 23 November 2019 в 03:44
поделиться

Строка представляет собой набор символов (16 бит без знака). Поэтому, если вы собираетесь преобразовать отрицательные числа в строку, они будут потеряны при переводе.

-3
ответ дан 23 November 2019 в 03:44
поделиться

Попробуйте указать 8-битную кодировку в обоих преобразованиях. Например, ISO-8859-1.

-1
ответ дан 23 November 2019 в 03:44
поделиться

The root problem is (I think) that you are unwittingly using a character set for which:

 bytes != encode(decode(bytes))

in some cases. UTF-8 is an example of such a character set. Specifically, certain sequences of bytes are not valid encodings in UTF-8. If the UTF-8 decoder encounters one of these sequences, it is liable to discard the offending bytes or decode them as the Unicode codepoint for "no such character". Naturally, when you then try to encode the characters as bytes the result will be different.

The solution is:

  1. Be explicit about the character encoding you are using; i.e. use a String constructor and String.toByteArray method with an explicit charset.
  2. Use the right character set for your byte data ... or alternatively one (such as "Latin-1" where all byte sequences map to valid Unicode characters.
  3. If your bytes are (really) binary data and you want to be able to transmit / receive them over a "text based" channel, use something like Base64 encoding ... which is designed for this purpose.
37
ответ дан 23 November 2019 в 03:44
поделиться

The "proper conversion" between byte[] and String is to explicitly state the encoding you want to use. If you start with a byte[] and it does not in fact contain text data, there is no "proper conversion". Strings are for text, byte[] is for binary data, and the only really sensible thing to do is to avoid converting between them unless you absolutely have to.

If you really must use a String to hold binary data then the safest way is to use Base64 encoding.

100
ответ дан 23 November 2019 в 03:44
поделиться

Использование новой строки (byOriginal) и обратное преобразование в байт [] с использованием getBytes () не t гарантирует два байта [] с равными значениями. Это происходит из-за вызова StringCoding.encode (..) , который закодирует String в Charset.defaultCharset () . Во время этого кодирования кодировщик может заменить неизвестные символы и внести другие изменения. Следовательно, использование String.getBytes () может не вернуть массив, равный тому, который вы изначально передали конструктору.

Это происходит из-за вызова StringCoding.encode (..) , который закодирует String в Charset.defaultCharset () . Во время этого кодирования кодировщик может заменить неизвестные символы и внести другие изменения. Следовательно, использование String.getBytes () может не вернуть массив, равный тому, который вы изначально передали конструктору.

Это происходит из-за вызова StringCoding.encode (..) , который закодирует String в Charset.defaultCharset () . Во время этого кодирования кодировщик может заменить неизвестные символы и внести другие изменения. Следовательно, использование String.getBytes () может не вернуть массив, равный тому, который вы изначально передали конструктору.

12
ответ дан 23 November 2019 в 03:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: