Во-первых, вам определенно необходимо изменить zipOut.write("类型".getBytes());
на zipOut.write("类型".getBytes(StandardCharsets.UTF_8));
Кроме того, когда вы открываете результирующий CSV-файл, редактор может не знать, что содержимое закодировано в UTF-8. Возможно, вам придется сообщить вашему редактору, что это кодировка UTF-8. Например, в Блокноте вы можете сохранить свой файл с опцией «Сохранить как» и изменить кодировку на UTF-8. Кроме того, ваша проблема может быть просто неправильная проблема отображения, а не фактическая кодировка. Существует библиотека Java с открытым исходным кодом, в которой есть утилита, которая преобразует любую строку в последовательность Unicode и наоборот. Эта утилита помогала мне много раз, когда я работал над диагностикой различных проблем, связанных с кодировкой. Вот пример того, что делает код
result = "Hello World";
result = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(result);
System.out.println(result);
result = StringUnicodeEncoderDecoder.decodeUnicodeSequenceToString(result);
System.out.println(result);
Вывод этого кода:
\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064
Hello World
Библиотека может быть найдена в Maven Central или в Github Он поставляется как артефакт maven и содержит источники и javadoc
Вот javadoc для класса StringUnicodeEncoderDecoder
Я попробовал ваши данные и получил это:
System.out.println(StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence("类型"));
System.out.println(StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence("类型"));
И вывод был:
\u7c7b\u578b
\u00e7\u00b1\u00bb\u00e5\u017e\u2039
Похоже, вы потеряли информацию, и это не просто проблема с отображением