今天在做一个SQL脚本文件生成需求,其中,需要设置:
- 文件编码为:UTF-8
- 文件换行格式为:UNIX
UTF-8这个好说,因为java代码可以指定文件编码,如:
但是Unix换行格式就很神奇了,情况如下:
注:我们是前后端分离项目,前端使用的是文本域编写SQL内容,然后传递到后端存储
- 当在SQL文本域中输入几十或上百行的SQL代码时,生成SQL文件的换行格式为Unix
- 当在SQL文本域中输入一行SQL代码时,生成SQL文件的换行格式为window
- java代码也无法指定换行格式
(其实对于SQL脚本文件,是不可能出现单行SQL的场景)
后面了解了下“文件换行格式”,才知道出现上面的原因:
首先:要知道window和Unix对于文件换行格式的区别
缩写 | ASCⅡ转义 | 系统 | ASCⅡ值 |
CR | \r | MacIntosh(早期的Mac) | 13 |
LF | \n | Unix/Linux/Mac OS X | 10 |
CR LF | \r\n | Windows |
- window:支持\r\n
- unix:仅至此\n
原因
我们在文本域中的存在多行内容,在转为json时,会自动变为“\n”,不会存在\r,因此,java在生成SQL文件时,默认文件换行格式为Unix、
当文本域只有一行内容时,不存在换行,java默认换行格式为window