首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Struts2下载期间自动插入空格

在Struts2下载期间自动插入空格
EN

Stack Overflow用户
提问于 2016-08-09 06:06:22
回答 1查看 62关注 0票数 0

我想做的是:

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

AwesomeAction.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
InputStream fileInputStream;

public InputStream getFileInputStream(){
    return fileInputStream;
}

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

struts.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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"),但它在每个字符之前添加了一个空格。

“t o o”

在服务器调试中,我确信我的变量包含"toto“服务器端,所以它必须是我错过的配置。

知道吗?

使用导入org.hsqldb.lib.StringInputStream;对于InputStream,由于字符串是在该类中生成的,所以我不能使用FileInputStream或其他任何东西,所以我不知道有什么其他方法可以做到这一点?

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

感谢托马斯:

使用StringInputStream是问题的根源,取而代之的是: fileInputStream =新的fileInputStream

它为"res“变量构建一个inputStream,并使用实际的编码等.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-09 06:25:30

像这样的问题可能会由于不同的编码而发生。在内部,Java使用16位字符存储字符串,当您将这些字符转换为字节表示(例如写入流)时,它将使用一些编码(调用方提供的编码或默认编码(通常是系统编码)。

因此,它将取决于StringInputStream对字符串做了什么,即它如何将字符串转换为字节,以及使用了哪种编码(如果有的话)。

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

正如您所做的那样,即使用ByteArrayInputStream(res.getBytes(StandardCharsets.UTF_8)),至少可以在编写时解决问题。编辑器可能会正确地解释数据,即使缺少BOM ( UTF-8表示像ISO-拉丁文1 (ASCII)这样的通用字符,因此即使是读取器中的“错误”编码也可能不是问题)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38853061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文