LINUX.ORG.RU

История изменений

Исправление saahriktu, (текущая версия) :

у тебя же софт не имеет представления о юникоде, правильно?

Основной софт знает про юникод, но при однобайтной локали теперь не юникод, а соответствующая однобайтная кодировка.

Вот специально создал почти самый страшный вариант имени файла, которое хорошо можно рассмотреть задействуя hexdump:

> ls | hexdump -C
00000000  21 20 1f 1e 1d 1c 1b 1a  19 18 17 16 15 14 13 12  |! ..............|
00000010  11 10 0f 0e 0d 0c 0b 0a  09 08 07 06 05 04 03 02  |................|
00000020  01 11 40 0a 74 65 73 74  0a 74 65 73 74 2e 63 0a  |..@.test.test.c.|
00000030  74 65 73 74 0a 74 65 7a  74 0a 0a                 |test.tezt..|
0000003b
Тут почти все управляющие символы кроме нулевого, который обработался как указатель конца строки. Просто «ls» его показывает как
! ????????????????????????????????@
А в mc он виден как
! ................................@
и доступен на чтение, переименование и прочее.

Без переименования к такому файлу из командной строки можно обращаться как к ??????????????????????????????????@

> cat ??????????????????????????????????@
1237>
При этом даже такие конструкции всё обрабатывают нормально (переместил чтобы в вывод не попали внутренности бинарника и исходника, которые теперь уже неактуальны):
> find . -type f -exec cat "{}" \;
1237>

Исходная версия saahriktu, :

у тебя же софт не имеет представления о юникоде, правильно?

Основной софт знает про юникод, но при однобайтной локали теперь не юникод, а соответствующая однобайтная кодировка.

Вот специально создал почти самый страшный вариант имени файла, которое хорошо можно рассмотреть задействуя hexdump:

> ls | hexdump -C
00000000  21 20 1f 1e 1d 1c 1b 1a  19 18 17 16 15 14 13 12  |! ..............|
00000010  11 10 0f 0e 0d 0c 0b 0a  09 08 07 06 05 04 03 02  |................|
00000020  01 11 40 0a 74 65 73 74  0a 74 65 73 74 2e 63 0a  |..@.test.test.c.|
00000030  74 65 73 74 0a 74 65 7a  74 0a 0a                 |test.tezt..|
0000003b
Тут почти все управляющие символы кроме нулевого, который обработался как указатель конца строки. Просто «ls» его показывает как
! ????????????????????????????????@
А в mc он виден как
! ................................@
и доступен на чтение, переименование и прочее.

Без переименования к такому файлу из командной строки можно обращаться как к ??????????????????????????????????@

> cat ??????????????????????????????????@
1237>
При этом даже такие конструкции всё обрабатывают нормально (переместил чтобы не в вывод не попали внутренности бинарника и исходника, которые теперь уже неактуальны):
> find . -type f -exec cat "{}" \;
1237>