См. Раздел UTF-8 против UTF8 против UTF8 Кодирование документов.
Подводя итог, у Perl есть две разные кодировки UTF-8. Его собственное кодирование называется utf8
и в основном допускает любую кодовую точку, независимо от того, что стандарт Unicode говорит об этой кодовой точке.
Другая кодировка называется utf-8
(a.k.a. utf-8-strict
). Это позволяет использовать только те кодовые точки, которые назначены стандартом Unicode.
\x{FFFF}
не является допустимой кодовой точкой в соответствии с Unicode. Но кодировка Perl utf8
не заботится об этом.
По умолчанию функция encode
заменяет любой символ, который не существует в целевой кодировке, символом подстановки (см. Раздел Обработка искаженных данных *1020*). Для utf-8
этот символ замещения равен U + FFFD (ЗАМЕНЯЮЩИЙ ХАРАКТЕР) , который закодирован в UTF-8 как 11101111 10111111 10111101 (двоичный).