gpt4 book ai didi

java - Struts2 下载期间自动插入空格

转载 作者:行者123 更新时间:2023-12-01 09:36:33 25 4
gpt4 key购买 nike

我正在尝试做什么:

在服务器上生成txt文件并在客户端下载。我使用的是struts 2,以下是代码部分:

AwesomeAction.java

InputStream fileInputStream;

public InputStream getFileInputStream(){
return fileInputStream;
}

public String execute() {
res = "toto";
fileInputStream = new StringInputStream(res);
return SUCCESS;
}

struts.xml

<action name="awesomeAction" class="pathtomyawesomeaction">
<result name="success" type="stream">
<param name="contentType">text/plain</param>
<param name="inputName">fileInputStream</param>
<param name="contentDisposition">attachment;filename="id_opp.txt"</param>
<param name="bufferSize">1024</param>
</result>
<result name="error" type="redirect">/erreur.do</result>
</action>

什么不起作用:

当我单击触发操作的链接时,实际上会下载一个名为“id_opp.txt”的文件,它包含所有文本(“toto”),但在每个字符之前添加了一个空格。

“到到”

通过服务器调试,我确信我的变量包含“toto”服务器端,所以它一定是我错过的配置......

有什么想法吗?

<小时/>

使用 import org.hsqldb.lib.StringInputStream;对于 InputStream,由于 String 是在该类中构建的,因此我无法使用 FileInputStream 或任何其他东西,我不知道有任何其他方法可以实现这一点?

检查编码,一旦得到一些结果就会更新

<小时/>

感谢托马斯的解决:

使用 StringInputStream 是问题的根源,而是将其切换为:fileInputStream = new ByteArrayInputStream(res.getBytes(StandardCharsets.UTF_8));

它为“res”变量构建一个输入流,以及实际的编码等...

最佳答案

由于编码不同,可能会出现此类问题。 Java 内部使用 16 位字符存储字符串,当您将它们转换为字节表示形式(例如写入流)时,它将使用某种编码(调用者提供的编码或默认编码,通常是系统编码)。

因此,这取决于 StringInputStream正在处理字符串,即如何将字符串转换为字节以及使用哪种编码(如果有)。

此外,如果您不添加任何信息来指示编码(例如 UTF-8 的 BOM(字节顺序标记)),则可能取决于读者如何解释 txt 文件。

按照您的方式进行操作,即使用 ByteArrayInputStream(res.getBytes(StandardCharsets.UTF_8)) ,至少可以解决写作时的问题。然后,编辑者可能会正确解释数据,即使 BOM 丢失(UTF-8 代表 ISO-Latin 1 (ASCII) 等常见字符,因此即使阅读器中的“错误”编码也可能不是问题)。

关于java - Struts2 下载期间自动插入空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38853061/

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