0

我有一个存储过程,它读取一个表,然后将这些记录导出到一个文件中

这些文件必须以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 字符集写入文件句柄标识的文件'

4

0 回答 0