Функция convert обрезает последние 2 символа.

nothx
Дата: 01.03.2007 14:02:52
select * from nls_database_parameters

NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET AL32UTF8
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET UTF8
NLS_RDBMS_VERSION 9.2.0.7.0

Делаю запись в файл:
allf := UTL_FILE.fopen('TR_DIR', 'test.txt', 'w');
UTL_FILE.put(allf, convert('Привет как дела', 'CL8MSWIN1251', 'UTF8'));
UTL_FILE.fclose(allf); 
Результат в файле:
Привет как де
padavan
Дата: 01.03.2007 14:08:14
nothx
select * from nls_database_parameters
Делаю запись в файл:
allf := UTL_FILE.fopen('TR_DIR', 'test.txt', 'w');
UTL_FILE.put(allf, [color=red]convert('Привет как дела', 'CL8MSWIN1251', 'UTF8')[/color]);
UTL_FILE.fclose(allf); 
Результат в файле:
Привет как де


А конвертация проходит нормально?
nothx
Дата: 01.03.2007 14:08:46
А как это проверить?
padavan
Дата: 01.03.2007 14:10:49
ну, например, dbms_output.put_line(convert(......))... и глянуть, что у тебя на выходе
nothx
Дата: 01.03.2007 14:15:28
Добавил это строчку, на выходе ????
dbms_output.put_line(convert('Привет как дела', 'CL8MSWIN1251', 'AL32UTF8'));
nothx
Дата: 01.03.2007 14:18:44
Хотя в файле нормально на русском, только 2-х букв нет последних.
mcureenab
Дата: 01.03.2007 14:19:48
nothx
А как это проверить?


select
  convert(convert('Привет как дела', 'CL8MSWIN1251', 'UTF8'), 'AL32UTF8', 'CL8MSWIN1251')
from dual
/


ИМХО, 'UTF8' использовать нельзя, поскольку твоя строка закодирована в 'AL32UTF8'. Нужно просто опустить этот параметр.

select
  convert(convert('Привет как дела', 'CL8MSWIN1251'), 'AL32UTF8', 'CL8MSWIN1251')
from dual
/

CONVERT(CONVERT
---------------
Привет как дела

SQL>

Попробуй завершить строку вызовом put_line.
padavan
Дата: 01.03.2007 14:20:12
пример:

SQL> set serveroutput on
SQL> exec dbms_output.put_line('aaaaa');
aaaaa

PL/SQL procedure successfully completed.

SQL>
mcureenab
Дата: 01.03.2007 14:22:28
nothx
Хотя в файле нормально на русском, только 2-х букв нет последних.


А если в него ещё что нибудь вывести?

allf := UTL_FILE.fopen('TR_DIR', 'test.txt', 'w');
UTL_FILE.put(allf, convert('Привет как дела', 'CL8MSWIN1251'));
UTL_FILE.put_line(allf, convert('Привет как дела', 'CL8MSWIN1251'));
UTL_FILE.fclose(allf); 
mcureenab
Дата: 01.03.2007 14:25:08
padavan
пример:

SQL> set serveroutput on
SQL> exec dbms_output.put_line('aaaaa');
aaaaa

PL/SQL procedure successfully completed.

SQL>


Не прокатит.

SQL> exec dbms_output.put_line(convert('Привет как дела', 'CL8MSWIN1251'))
????

PL/SQL procedure successfully completed.

Клиент ожидает строку в кодировке БД - AL32UTF8, а мы ему 'CL8MSWIN1251' подсунули.