Вы уверены, что ваш набор символов БД - AL32UTF8, а ваш файл на диске - ASCII?Потому что это выглядит как-то, где-то AL16UTF16 (который, я думаю, такой же, как UTF-16BE).
Ваша тестовая строка "test file \ n" кодируется в байтах UTF8 0x746573742066696C650A.На самом деле у вас есть 5 азиатских символов, потому что третий является непечатным символом, LEFT-RIGHT ISOLATE.
Когда я конвертирую "тестовый файл \ n" в UTF16, я получаю следующее:
select dump( utl_i18n.raw_to_char( hextoraw('746573742066696C650A'), 'AL16UTF16' ), 1016 )
from dual;
Typ=1 Len=15 CharacterSet=AL32UTF8: e7,91,a5,e7,8d,b4,e2,81,a6,e6,a5,ac,e6,94,8a
select dump( '瑥獴楬攊', 1016) from dual;
Typ=96 Len=15 CharacterSet=AL32UTF8: e7,91,a5,e7,8d,b4,e2,81,a6,e6,a5,ac,e6,94,8a
Обратите внимание, что последовательности байтов одинаковы.Второй dump()
имеет Typ=96
, что является значением NCHAR
.Вы получаете те же наборы символов для вашей базы данных, что и моя?
select * from nls_database_parameters
where parameter IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET' );
PARAMETER VALUE
NLS_CHARACTERSET AL32UTF8
NLS_NCHAR_CHARACTERSET AL16UTF16