UTL_FILE写入文件,文件用记事本打开不换行的问题

承接之前的一篇
之前将一行数据写完然后用UTL_FILE.NEW_LINE(l_output);换行结束
但是发现一个问题,生成的文件用记事本打开不会自动换行,像这样
不换行
但是用notepad打开会自动换行,因为windows记事本的换行是\r\n,而其他一般是\n。有一种手工的方法就是用notepad打开然后将所有\n替换成\r\n。
替换

不想手工改的话,最后解决方法如下:

UTL_FILE.put(l_output,chr(13)||chr(10));
UTL_FILE.NEW_LINE(l_output,0);
用上面的代码替换UTL_FILE.NEW_LINE(l_output);

也可以这样

UTL_FILE.FFLUSH(l_output);-- FFLUSH强制将缓冲的数据写入文件
UTL_FILE.put(l_output,chr(13)||chr(10));

在这个过程中发现一个问题如果只用UTL_FILE.put(l_output,chr(13)||chr(10));输出的文件内容会减少,这个有点不太明白,可能跟缓存有关。如果有大神知道原因的话欢迎评论赐教:)
最后瞎折腾就加了一个UTL_FILE.NEW_LINE(l_output,0); OK了

还有一个问题就是导出的csv文件直接用excel打开,中文乱码了,知道解决的大神求赐教
用记事本打开然后另存为的方法可以解决,但是不想用手工解决的方法。
而且奇怪的是我选择另存为的时候编码显示的就是utf-8,用notepad打开显示也是utf-8,为什么再另存为一次再用excel打开就正常了呢。搞不懂

猜你喜欢

转载自blog.csdn.net/qq_37613533/article/details/81700890