Я пишу простой http-сервер Java, который отвечает данными JSON. Я пытаюсь сжать данные перед отправкой, но обычно они отправляют обратно сжатые данные, которые выдают ошибку в браузере. Например, в Firefox написано:
Ошибка кодирования содержимого
Невозможно отобразить страницу, которую вы пытаетесь просмотреть, поскольку она использует недопустимую или неподдерживаемую форму сжатия.
Иногда это работает, если строка, которую я сжимаю, небольшая без определенных символов, но кажется, что она запуталась, когда есть квадратные скобки и т. Д. В частности, приведенный ниже пример текста не работает.
Это какая-то проблема кодировки символов? Я пробовал все что угодно, но просто не хочет работать легко.
String text;
private Socket server;
DataInputStream in = new DataInputStream(server.getInputStream());
PrintStream out = new PrintStream(server.getOutputStream());
while ((text = in.readLine()) != null) {
// ... process header info
if (text.length() == 0) break;
}
out.println("HTTP/1.1 200 OK");
out.println("Content-Encoding: gzip");
out.println("Content-Type: text/html");
out.println("Connection: close");
// x is the text to compress
String x = "jsonp1330xxxxx462022184([[";
ByteArrayOutputStream outZip = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(outZip);
byte[] b = x.getBytes(); // Changing character encodings here makes no difference
gzip.write(b);
gzip.finish();
gzip.close();
outZip.close();
out.println();
out.print(outZip);
server.close();