упомянутые вами коды 024E, 0247, ..
называются кодовые точки Unicode и не зависят от UTF-8 или UTF-16.
Если perl
является вашим вариантом, вы можете получить коды с помощью:
perl -C -ne 'map {printf "\\u%04X", ord} (/./g)' <<< "Ɏɇ衳"; echo
который выводит:
\u024E\u0247\u8873
Объяснение
Код Perl выше в основном эквивалентен:
#!/usr/bin/perl
use utf8;
$str = "Ɏɇ衳";
foreach $chr ($str =~ /./g) {
printf "\\u%04X", ord($chr);
}
print "\n";
use utf8
указывает, что строка закодирована в UTF-8 (только потому, что строка встроена в скрипт).
($str =~ /./g)
разбивает строку на массив символов.
foreach
перебирает массив символов.
ord
возвращает кодовую точку данного символа.
EDIT
Если вы хотите автоматически масштабировать количество цифр с учетом символов вне BMP, попробуйте вместо этого:
#!/usr/bin/perl
use utf8;
$str = "Ɏɇ衳";
foreach $chr ($str =~ /./g) {
$n = ord($chr);
$d = $n > 0xffff ? 8 : 4;
printf "\\u%0${d}X", $n;
}