Почему мои имена файлов выглядят «нормально» в Linux, но не удаленно в Windows?

Это сработало с образцом файла

sort -gk 2,2 file.txt | tail -n2
446 16480
386 16501,5

Что касается определения top %5, то для этого требуется дополнительная логика. Здесь берется количество новых строк в файле и умножается на .05, с масштабом 0 для устранения десятичных дробей.

sort -gk 2,2 file | tail -n$(bc <<<"scale=0; ($(wc -l < file)*.05)/1" | cut -d\. -f1)
446 16480
386 16501,5
10
12.03.2017, 12:01
1 ответ

Но вот Windows!

Windows не имеет к этому никакого отношения. Вы можете воспроизвести то же самое точное поведение с локальным экземпляром (скажем) терминала GNOME, с соответствующим образом выбранной кодировкой терминала и соответствующим образом настроенным языковым стандартом для ls , вообще без присутствия Windows ].

Единственное, что делает Windows, - это ясно показывает, что здесь происходит. Ваша программа Windows FTP берет байты в именах файлов и отображает их в виде соответствующих кодовых точек на кодовой странице 1252. Это однобайтовая кодировка, в которой почти все, что выше 0x1F - печатный глиф, сообщает нам, какие именно байты в ваших именах файлов. .

Ваше второе имя файла в основном неинформативно, но первое и третье говорят.

  • Первое имя файла - это последовательность байтов 63 61 66 c3 a9 2d 32 2e 70 6e 67 - На кодовой странице 1252 это cafà © -2.png . Это также кодировка UTF-8 café-2.png .
  • Третье имя файла - это последовательность байтов 63 61 66 e9 2e 70 6e 67 - В кодовой странице 1252 это café.png . Однако это недопустимая кодировка UTF-8. e9 начинает неполную последовательность кодирования символов.

Итак, что происходит, так это то, что вещи не с использованием кодовой страницы 1252, а те, которые используют UTF-8, а именно ваш сеанс SSH и ваш локальный эмулятор терминала, обрабатывают допустимый UTF-8 одинаково друг с другом, но обрабатывают недопустимый UTF-8 двумя разными способами:

  • Тот, который отображает блочную графику, очень вероятно, просто использует эту блочную графику. как общий выходной символ замены для недопустимых последовательностей UTF-8.
  • Тот, который отображает букву é , возвращается к кодовой странице 1252, когда обнаруживает недопустимую кодировку.

Ваша основная проблема - это система, которая каким-то образом генерирует некоторые имена файлов, закодированные как UTF-8, и другие имена файлов, закодированные в кодовой странице 1252.

11
27.01.2020, 20:02

Теги

Похожие вопросы