Функции plsql для обработки произвольных наборов символов (ну, насколько rdbms знает о них) находятся в пакетах utl_i18n и utl_raw.
для вашей конкретной задачи я бы предложил следующий тест:
select <pk_column_of_table_to_check>
, instr (
utl_i18n.string_to_raw (
<column_to_test>
, 'UTF8'
)
, hextoraw ( <hex_rep_in_utf8> )
)
from <table_to_check>
;
Если вы хотите проверить символы Юникода, для которых представление utf8 недоступно, используйте термин
utl_raw.convert ( hextoraw ( <hex_rep_in_utf16>, 'UTF16', 'UTF8' ) )
как второй аргумент для instr. не полагайтесь на абсолютные позиции, возвращаемые instr, а только на дихотомию 0 / не-0, поскольку вы сравниваете не по символам, а по уровню байтов.
utf8 и utf16 - это две разные кодировки на уровне байтов для наборов символов Unicode в смысле именованных символов; подробности можно найти на википедии и unicode.org
обратите внимание, что представление utf8 допускает тестирование на уровне байтов на уровне конструкции.
также обратите внимание, что кодировка utf16 должна быть легко доступна, так как это знакомое представление U + <4 шестнадцатеричных числа> для символов Юникода.
представление инкриминированных символов на уровне байтов должно быть доступно из стандарта (xml). в противном случае вы должны иметь представление о том, как называется символ, и искать его в базе данных кодовых точек на unicodde.org или где-то еще. Существуют также онлайн-инструменты для конвертации, если вы знаете только имя набора символов, но у вас есть образец текста в файле в вашей системе, я могу посмотреть Uris, если вам нужно.
Надеюсь, это поможет.
пс:
после более точного прочтения вашего первого комментария я думаю, что вы можете оказаться на невыполнимой задаче: чтобы правильно интерпретировать байтовые последовательности из однобайтовых кодировок кодировки, необходимо сохранить информацию о кодировке в использовании. Разве эта информация не будет потеряна, когда пользователь копирует текст из текстового процессора (установленного в определенный набор символов [кодировка]) в базу данных (где он будет храниться в наборе символов базы данных), когда копируется последовательность байтов? вам может повезти, если оба конца будут настроены на юникод или кодировка db charset будет utf8 (поэтому копирование некоторых символов будет неудачным), но как только данные будут в базе данных, у вас будет трудное время для восстановления оригинала (возможно, с поддержкой словаря)