Для оператора select вы можете просто использовать javascript.
document.getElementById('baz').value = '${param.baz}';
При кодировании его в base64 это превратит любые данные в ASCII безопасный текст, но закодированные данные base64 больше, чем orignal данные
Посмотрите этот вопрос, , Как Вы встраиваете двоичные данные в XML? Вместо того, чтобы преобразовать байт [] в Строку, затем продвигая в XML где-нибудь, преобразуйте байт [] к Строке через кодирование BASE64 (некоторые библиотеки XML имеют тип, чтобы сделать это для Вас). BASE64 декодируют, как только Вы возвращаете Строку от XML.
Использование http://commons.apache.org/codec/
Вы данные могут становиться испорченными из-за всех видов странных ограничений набора символов и присутствия non-priting символов. w/BASE64 палки.
Как вы строите свой XML-документ? Если вы используете встроенные в Java классы XML, то для вас должна быть обработана строковая кодировка.
Посмотрите на пакеты javax.xml и org.xml. Это то, что мы используем для генерации XML-документов, и он прекрасно обрабатывает все строковое кодирование и декодирование.
--- РЕДАКТИРОВАТЬ:
Хм, я думаю, что я неправильно понял проблему. Вы не пытаетесь закодировать обычную строку, но какой-то набор произвольных двоичных данных? В этом случае кодировка Base64, предложенная в предыдущем комментарии, вероятно, является подходящим вариантом. Я считаю, что это довольно стандартный способ кодирования двоичных данных в XML.
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();
}
}
}