Я часто использую станд.:: представьте в виде строки для содержания utf-8 символов без любых проблем вообще. Я сердечно рекомендую делать это при взаимодействии через интерфейс с API, которые используют utf-8 в качестве собственного строкового типа также.
, Например, я использую utf-8 при взаимодействии через интерфейс с моим кодом с интерпретатором Tcl.
главный протест является длиной станд.:: представьте в виде строки, больше не количество символов в строке.
Это совершенно раздражающая проблема, с которой мне приходилось решать несколько раз, и с которой я так и не нашел удовлетворительного решения.
Основная проблема в том, что API сервлетов здесь не поможет, так что вам придется его обмануть. Мое решение - написать подкласс HttpServletResponseWrapper, который переопределяет методы getWriter () и getOutput () и записывает данные в буфер. Затем вы отправляете () свой запрос на URI JSP, который хотите захватить, заменяя исходный ответ своим ответом оболочки. Затем вы извлекаете данные из буфера, управляете ими и записываете конечный результат обратно в исходный ответ.
Вот мой код, который делает это:
public class CapturingResponseWrapper extends HttpServletResponseWrapper {
private final OutputStream buffer;
private PrintWriter writer;
private ServletOutputStream outputStream;
public CapturingResponseWrapper(HttpServletResponse response, OutputStream buffer) {
super(response);
this.buffer = buffer;
}
@Override
public ServletOutputStream getOutputStream() {
if (outputStream == null) {
outputStream = new DelegatingServletOutputStream(buffer);
}
return outputStream;
}
@Override
public PrintWriter getWriter() {
if (writer == null) {
writer = new PrintWriter(buffer);
}
return writer;
}
@Override
public void flushBuffer() throws IOException {
if (writer != null) {
writer.flush();
}
if (outputStream != null) {
outputStream.flush();
}
}
}
Код для его использования может быть примерно таким:
HttpServletRequest originalRequest = ...
HttpServletResponse originalResponse = ...
ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
CapturingResponseWrapper responseWrapper = new CapturingResponseWrapper(originalResponse, bufferStream);
originalRequest.getRequestDispatcher("/my.jsp").forward(originalRequest, responseWrapper);
responseWrapper.flushBuffer();
byte[] buffer = bufferStream.toByteArray();
// now use the data
Это очень некрасиво, но это лучшее решение, которое я нашел.