0

我在 Windows 7 上使用 Oracle 11g,其国家字符集等于 AL16UTF16。

我正在尝试使用以下 PL/SQL 代码编写 3 个西里尔字母:

declare
  s nvarchar2(3):=nchr(1040) || nchr(1041) || nchr(1042);
  fileHandler UTL_FILE.FILE_TYPE;
begin
  fileHandler := UTL_FILE.FOPEN_NCHAR('TEMP', 'test.txt', 'W');
  UTL_FILE.PUT_NCHAR(fileHandler,s);
  UTL_FILE.FCLOSE(fileHandler);
end;

生成的文件长 5 个字节。如果我在 Notepad++ 中打开文件,我可以看到以下内容:DLE DC1 DC2,末尾有新行(字符 13+字符 10)。上面的代码有什么问题?

4

1 回答 1

0

在文本模式下,UTL_FILE 中的行终止有很多魔力。如果您将使用其他一些操作系统,您可能会遇到不同的行为。

为避免这种情况,您可以使用带转换的二进制模式

fileHandler := UTL_FILE.FOPEN('TEMP', 'test.txt', 'wb');
UTL_FILE.PUT_RAW (fileHandler, utl_raw.cast_to_raw(s));
于 2014-05-16T20:20:18.103 回答