Как Вы преобразовываете двоичные данные в Строки и назад в Java?

Для оператора select вы можете просто использовать javascript.

document.getElementById('baz').value = '${param.baz}';

27
задан Bill the Lizard 20 November 2008 в 02:31
поделиться

4 ответа

При кодировании его в base64 это превратит любые данные в ASCII безопасный текст, но закодированные данные base64 больше, чем orignal данные

19
ответ дан Sam 14 October 2019 в 13:37
поделиться

Посмотрите этот вопрос, , Как Вы встраиваете двоичные данные в XML? Вместо того, чтобы преобразовать байт [] в Строку, затем продвигая в XML где-нибудь, преобразуйте байт [] к Строке через кодирование BASE64 (некоторые библиотеки XML имеют тип, чтобы сделать это для Вас). BASE64 декодируют, как только Вы возвращаете Строку от XML.

Использование http://commons.apache.org/codec/

Вы данные могут становиться испорченными из-за всех видов странных ограничений набора символов и присутствия non-priting символов. w/BASE64 палки.

2
ответ дан Community 14 October 2019 в 13:37
поделиться

Как вы строите свой XML-документ? Если вы используете встроенные в Java классы XML, то для вас должна быть обработана строковая кодировка.

Посмотрите на пакеты javax.xml и org.xml. Это то, что мы используем для генерации XML-документов, и он прекрасно обрабатывает все строковое кодирование и декодирование.

--- РЕДАКТИРОВАТЬ:

Хм, я думаю, что я неправильно понял проблему. Вы не пытаетесь закодировать обычную строку, но какой-то набор произвольных двоичных данных? В этом случае кодировка Base64, предложенная в предыдущем комментарии, вероятно, является подходящим вариантом. Я считаю, что это довольно стандартный способ кодирования двоичных данных в XML.

0
ответ дан Herms 14 October 2019 в 13:37
поделиться

String (byte []) обрабатывает данные как кодировку символов по умолчанию. Таким образом, способ преобразования байтов из 8-битных значений в 16-битные символы Java Unicode будет отличаться не только в разных операционных системах, но даже в разных пользователях, использующих разные кодовые страницы на одном компьютере! Этот конструктор хорош только для декодирования одного из ваших собственных текстовых файлов. Не пытайтесь преобразовывать произвольные байты в символы в Java!

Кодирование как base64 является хорошим решением. Вот как файлы отправляются через SMTP (электронная почта). (Бесплатный) проект Apache Commons Codec сделает эту работу.

byte[] bytes = loadFile(file);          
//all chars in encoded are guaranteed to be 7-bit ASCII
byte[] encoded = Base64.encodeBase64(bytes);
String printMe = new String(encoded, "US-ASCII");
System.out.println(printMe);
byte[] decoded = Base64.decodeBase64(encoded);

Кроме того, вы можете использовать Java 6 DatatypeConverter :

import java.io.*;
import java.nio.channels.*;
import javax.xml.bind.DatatypeConverter;

public class EncodeDecode {    
  public static void main(String[] args) throws Exception {
    File file = new File("/bin/ls");
    byte[] bytes = loadFile(file, new ByteArrayOutputStream()).toByteArray();
    String encoded = DatatypeConverter.printBase64Binary(bytes);
    System.out.println(encoded);
    byte[] decoded = DatatypeConverter.parseBase64Binary(encoded);
    // check
    for (int i = 0; i < bytes.length; i++) {
      assert bytes[i] == decoded[i];
    }
  }

  private static <T extends OutputStream> T loadFile(File file, T out)
                                                       throws IOException {
    FileChannel in = new FileInputStream(file).getChannel();
    try {
      assert in.size() == in.transferTo(0, in.size(), Channels.newChannel(out));
      return out;
    } finally {
      in.close();
    }
  }
}
35
ответ дан Afshin Moazami 14 October 2019 в 13:37
поделиться
Другие вопросы по тегам:

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