В португальском языке сам язык называется «português», где это «ê» может быть выражено в Юникоде либо как кодовая точка U + EA, то есть LATIN SMALL LETTER E WITH CIRCUMFLEX, либо как обычное 'e ', сопровождаемый кодовой точкой U + 301, СОЧЕТАНИЕ КОМБИНИРОВАНИЯ CIRCUMFLEX. Таким образом, строка может быть 9, но это может быть 10 символов. Более длинная форма находится в форме нормализации D (образованной каноническим разложением), а более короткая форма находится в NFC (образованном каноническим разложением , за которым следует каноническим составом).
Однако, когда слово переносится, диакритический знак теряется, поэтому такие слова, как «portuguesas», которые по числу и полу совпадают с существительным «empresas», вообще не должны содержать диакритические знаки.
Отправленная строка содержит только один не-ASCII-символ, и это печатный символ. Это в слове "país".
Здесь показана каждая логическая кодовая точка ввода UTF-8:
$ echo "das empresas portuguesas neste país" | perl -CS -ne 'printf "%v02X\n", $_'
64.61.73.20.65.6D.70.72.65.73.61.73.20.70.6F.72.74.75.67.75.65.73.61.73.20.6E.65.73.74.65.20.70.61.ED.73.0A
И это показывает каждый отдельный байт:
$ echo "das empresas portuguesas neste país" | perl -C0 -ne 'printf "%v02X\n", $_'
64.61.73.20.65.6D.70.72.65.73.61.73.20.70.6F.72.74.75.67.75.65.73.61.73.20.6E.65.73.74.65.20.70.61.C3.AD.73.0A
Вот как это сделать, если вы хотите видеть только не-ASCII кодовые точки:
# logical code points
$ echo "das empresas portuguesas neste país" | perl -CS -pe 's/[^\x00-\x7F]/sprintf "\x5Cx{%X}", ord $&/ge'
das empresas portuguesas neste pa\x{ED}s
# separate bytes
$ echo "das empresas portuguesas neste país" | perl -C0 -pe 's/[^\x00-\x7F]/sprintf "\x5Cx%X", ord $&/ge'
das empresas portuguesas neste pa\xC3\xADs
Это может быть кодовая точка U + ED, или это может быть обычная "i", за которой следует кодовая точка U + 301, КОМБИНИРУЮЩАЯ ОСТРЫЙ АКЦЕНТ. Если это так, это будет выглядеть так:
# show the NFD form
$ perl -CS -le 'print "das empresas portuguesas neste pai\x{301}s"'
das empresas portuguesas neste país
# show UTF-8 non-ASCII code points
$ perl -CS -le 'print "das empresas portuguesas neste pai\x{301}s"' | perl -CS -pe 's/[^\x00-\x7F]/sprintf "\x5Cx{%X}", ord $&/ge'
das empresas portuguesas neste pai\x{301}s
# show non-ASCII bytes
$ perl -CS -le 'print "das empresas portuguesas neste pai\x{301}s"' | perl -C0 -pe 's/[^\x00-\x7F]/sprintf "\x5Cx%X", ord $&/ge'
das empresas portuguesas neste pai\xCC\x81s
Возможно, переполнение стека (или что-то еще) переписало вашу строку, возможно, удалив непечатаемые символы. Так что у вас могут быть вещи, которые мы не можем увидеть, потому что их нет в данных, на которые мы смотрели.