我有一个读取表的存储过程,然后将这些记录导出到文件
中这些文件必须以 UTF-8(无BOM)和换行编码。不CR 但有时用ASCII编码,所以我收到警告..
这是程序
BEGIN
l_file := UTL_FILE.FOPEN_NCHAR(C_DIRECTORY_PATH, l_tmp_file_name, 'A', 32767);
UTL_FILE.PUTF_NCHAR(l_file, l_head || '\n');
FOR table IN (SELECT * FROM TABLE_1)
LOOP
l_rec := '"' || table.field1 || '"' || table.field2 || ... -- a lot of fields
UTL_FILE.PUTF_NCHAR (l_file, l_rec || '\n');
UTL_FILE.FFLUSH(l_file);
END LOOP;
UTL_FILE.FFLUSH(l_file);
UTL_FILE.FCLOSE(l_file);
END;
所以检查文件是否以UTF编码...我运行文件filename 我得到的价值如下:
UTF-8 Unicode text, with very long lines, with CRLF line terminators
UTF-8 Unicode text, with very long lines
ASCII text, with very long lines
虽然我期待UTF-8,但它是随机的。
db的实例正在 redhat发行版上运行 WE8MSWIN1252(NLS DB()
为什么我使用UTL_FILE.FOPEN_N_CHAR?
'...始终以UTF8'
读取和写入文件的内容
https://docs.oracle.com/cd/E18283_01/appdev.112/e16760/u_file.htm#BABDEJDH
为什么选择PUTF_NCHAR?
'格式化文本以UTF8字符集写入文件 由文件句柄'
标识