PL / SQL编写Unicode文件

时间:2014-05-16 19:16:55

标签: oracle unicode plsql utl-file

我在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)。上面的代码出了什么问题?

1 个答案:

答案 0 :(得分:0)

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

要避免它,您可以使用带转换的二进制模式

fileHandler := UTL_FILE.FOPEN('TEMP', 'test.txt', 'wb');
UTL_FILE.PUT_RAW (fileHandler, utl_raw.cast_to_raw(s));