我有一个存储过程,它读取一个表,然后将这些记录导出到一个文件中
这些文件必须以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 读写'</p>
https://docs.oracle.com/cd/E18283_01/appdev.112/e16760/u_file.htm#BABDEJDH
为什么选择 PUTF_NCHAR?
'格式化文本以 UTF8 字符集写入文件句柄标识的文件'