为了账号安全,请及时绑定邮箱和手机立即绑定

为什么缺少回车符?

为什么缺少回车符?

湖上湖 2022-06-15 15:27:29
我有一个 SQL 命令将字段更新到表中,并根据“cat file.txt”填充它。这个文件有很多行,我想稍后进入休眠字段,但似乎在从 db hibernate 读取它之后删除所有回车。这是我从 shell 脚本(bash)执行的脚本: REQUEST_FILE=`cat file.txt` echo "UPDATE table SET request_info='$REQUEST_FILE'  WHERE id=1;" > ./after.sql 如果我做 after.sql 的 cat 我得到: UPDATE table SET request_info='1-Start-Env Script for Env 2-insert done 3-update info done 4-all performed correctly'  WHERE id=29;这是数据库表结构:Table: tableColumns:id int(11) AI PK submit_date datetime request_type varchar(45) request_info longtext这是存储在 db 上的数据,该行如何:# id, submit_date,request_type, request_info'29', '2019-02-11 04:55:21', 'check', '1-Start-Env Script for Env\n2-insert done\n3-update info done\n4-all performed correctly'所以直到这一步我猜一切都很好,因为字段包含'\ n'Hibernate 类是这样完成的:@Entity@Table(name="table")@NamedQuery(name="Table.findAll", query="SELECT u FROM Table u")public class Table implements Serializable {   private static final long serialVersionUID = 1L;   @Id   @GeneratedValue   private int id;   @Column(name="request_info")   private String requestInfo;   @Column(name="request_type")   private String requestType;   @Temporal(TemporalType.TIMESTAMP)   @Column(name="submit_date")   private Date submitDate;当我访问 requestInfo 变量时,输出是:1-Start-Env 脚本用于 Env2-insert done3-update info done4-all 执行正确此变量用于在单击 JSF 页面中的按钮后创建文件:  HttpServletResponse response = (HttpServletResponse)   fc.getExternalContext().getResponse();    response.reset();    response.setContentType("text/plain");    response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");    OutputStream output = response.getOutputStream();     output.write(request.getRequestInfo().getBytes());    output.flush();    output.close();如果我执行 System.out 我看到正确的数据,那么我猜是 getBytes 函数没有返回回车:         System.out.println("file content:" +request.getRequestInfo());输出:file content:1-Start-Env Script for Env 2-insert done 3-update info done 4-all performed correctly你有什么主意吗?谢谢
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

您的问题是换行符。

而不是\n,\r\n用于文件中的新行。

但是,这不会解决所有平台上的问题,只会解决您正在测试的平台。

有关换行符和不同平台的更多信息,请参见此处:

https://superuser.com/questions/374028/how-are-n-and-r-handled-differently-on-linux-and-windows

您也可以尝试以下方法:

output.write(request.getRequestInfo().replaceAll("(\\\\r\\\\n|\\\\n)", "\\\n"));

同样,您的 servlet 不知道浏览器在哪个平台上(Windows、Mac 或其他),因此除非您要查看用户代理标头或其他东西,否则您总是会遇到一个系统或另一个系统的问题。


查看完整回答
反对 回复 2022-06-15
  • 1 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信