gpt4 book ai didi

java - HttpServletResponse 没有覆盖我设置的参数

转载 作者:行者123 更新时间:2023-11-29 04:21:16 32 4
gpt4 key购买 nike

我有一个 Java 网络服务应用程序,我正在尝试执行导出功能以将一些数据从数据库导出到 excel 文件

为此,我使用了 HttpServletResponse,但即使我设置了文件名和编码类型,导出的文件也没有使用它们。

我需要使用相应的导出日期和编码类型设置文件名,以允许 UTF-8 字符,如 á、ó、ñ 等 --> 这是固定的,请参阅下面的编辑 1。

下面是我的代码:

@RequestMapping(value = "/export", method = RequestMethod.GET)
public @ResponseBody
void export(HttpServletRequest request, HttpServletResponse r) {
Response response = new Response();
try {
response = service.export();
if(response.isSuccess()){
r.setHeader( "Content-Disposition","attachment; filename=export_20171216.xls");
r.setContentType("application/vnd.ms-excel");
r.setCharacterEncoding("UTF-8");
OutputStream out = r.getOutputStream();
byte[] buffer = new byte[4096];
int length;
while ((length = ((InputStream) response.getData()).read(buffer)) > 0){
out.write(buffer, 0, length);
}
out.flush();
out.close();
}
else{
r.sendError(801, response.toString());
}
} catch (Exception e) {
e.printStackTrace();;
}
}

结果,我得到的文件名称类似于 2ea4a24e-b0b4-4d50-9604-4fcdb3713b90.xls,文件中的字样如下:Nömero 而不是 Número

--- 编辑 1我在创建 ByteArray 时使用以下代码修复了重音元音

new ByteArrayInputStream(sb.toString().getBytes("ISO-8859-15"));

最佳答案

如果我正确地解决了您的问题,那么您正在尝试使用必须编码的符号来保留文件名。根据 setHeaders 方法文档:

the header value If it contains octet string, it should be
* encoded according to RFC 2047
* (http://www.ietf.org/rfc/rfc2047.txt)

更有可能您的输入文件名是八位字节的 ASCII 格式。当你用你喜欢的符号设置标题时,尝试使用 java.nio.charset.CharsetDecoder 进行适当的解码。

多一点解释:ISO-8859-15 不是 Unicode 格式,它上面的任何符号都会导致对 HTTP 属性的整个字符串进行编码。

关于java - HttpServletResponse 没有覆盖我设置的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49015392/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com