Юникод это набор символов. UTF - это кодировки.
Unicode определяет набор символов с соответствующими кодовыми точками, т.е. значения, которые однозначно идентифицируют символы в наборе символов Unicode.
Например, согласно unicode-table.com U+0041
соответствует столице A, U+03A3
- греческая заглавная сигма (Σ), а U+2603
- снеговик (☃). U+
цифры - это кодовые точки. Юникод сообщает нам, какой символ соответствует какой кодовой точке, но не говорит нам, как кодировать эти кодовые точки в байтах.
Это где UTF (Unicode Transformation Format) вступает в игру. UTF - это кодировка: она отображает кодовые точки Unicode в однозначные последовательности байтов.
UTF-32 - это "тупая" кодировка. Все кодовые точки Unicode имеют длину не более 4 байтов, поэтому UTF-32 просто интерпретирует кодовую точку как 4-байтовое число (32-битное, отсюда и название) с порядком байтов с прямым порядком байтов. Таким образом, U+2603
кодируется как 0x00002603
.
UTF-32 очень прост, но также очень избыточен. Наиболее часто используемые символы попадают в диапазон ASCII и представлены кодовыми точками 0-127 в Unicode, поэтому в файлах с кодировкой UTF-32 почти 3 из 4 байтов будут нулями. Почти каждое английское предложение становится в 4 раза длиннее (в байтах) при кодировании в UTF-32 вместо ASCII.
UTF-8 (очень распространенный в Интернете) использует только 1 байт для символов ASCII, поэтому он не вносит никаких издержек в файлы только для ASCII (каждый файл ASCII также является файлом UTF-8 с тем же содержимым). Другие символы требуют до 6 байтов.
UTF-16 (используется Windows, просто чтобы назвать один пример) является компромиссом между UTF-32 и UTF-8. Кодовые точки кодируются в 16-битные или 32-битные последовательности. В большинстве случаев он более избыточен, чем UTF-8, но проще в обслуживании и быстрее обрабатывается.
Разные символы могут иметь разные представления в разных кодировках UTF-x. Например, последовательности UTF-8 могут занимать до 6 байтов, в то время как последовательности UTF-16 имеют длину не более 4 байтов, хотя обе кодируют один и тот же набор символов (Unicode). Более мелкозернистые кодировки (UTF-8) используют больше битов, чтобы указать длину последовательности, поэтому для кодовых значений с высокими значениями кодирования более длинные и менее оптимальные значения.
Ответ dsolimano объясняет поведение вашей оболочки.