UTF-16, UTF-8 и прочие кодировки применительно к путям в файловых системах

Здесь обсуждаются темы, косвенно связанные с Far.
Post Reply
2useven10
Posts: 5514
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 22 times
Been thanked: 356 times

UTF-16, UTF-8 и прочие кодировки применительно к путям в файловых системах

Post by 2useven10 »

SEt wrote: Mon 27 Jul, 2026 21:22 UTF-16, так как, к сожалению, в UTF-8 не всё можно передать без потерь
Очень интересное утверждение. Пространства же идентичны (без привязки к farmanager). Можно пример?
User avatar
John Doe
Бюрократ
Posts: 14635
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 94 times
Been thanked: 526 times
Contact:

PictureView 3 — просмотр изображений различных форматов

Post by John Doe »

Имена в utf16 могут содержать невалидные для unicode последовательности - непарные суррогаты.
И это будет валидным именем в файловой системе.
https://t.me/FarManager — Telegram чат
2useven10
Posts: 5514
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 22 times
Been thanked: 356 times

PictureView 3 — просмотр изображений различных форматов

Post by 2useven10 »

Такое да возможно, но это некорректный юникод.
Неправильные utf-8 символы в такое вроде преобразуются, чтобы обратная перекодировка работала.
Файлы с такими именами это скорее баг окошек.
Last edited by 2useven10 on Tue 28 Jul, 2026 03:53, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 14635
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 94 times
Been thanked: 526 times
Contact:

PictureView 3 — просмотр изображений различных форматов

Post by John Doe »

2useven10 wrote: Tue 28 Jul, 2026 03:52 Неправильные utf-8 символы в такое вроде преобразуются,
нет, поэтому для решения этой проблемы придумали wtf-8.
Файлы с такими именами это скорее баг окошек.
Это вряд ли.
На линуксе вроде как ещё свободнее с именами обходятся - это байтовые последовательности не привязанные к кодировке.
https://t.me/FarManager — Telegram чат
2useven10
Posts: 5514
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 22 times
Been thanked: 356 times

PictureView 3 — просмотр изображений различных форматов

Post by 2useven10 »

John Doe wrote: Tue 28 Jul, 2026 07:30нет,
Тем не менее - Да. (0xDC80 | Char) это вторая часть суррогатной пары без первой.
John Doe wrote: Tue 28 Jul, 2026 07:30 На линуксе вроде как ещё свободнее с именами обходятся
В файловой системе да, последовательность байт. В ОС Linux, скорее уже предполагается UTF-8.
Last edited by 2useven10 on Tue 28 Jul, 2026 10:09, edited 1 time in total.
2useven10
Posts: 5514
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 22 times
Been thanked: 356 times

PictureView 3 — просмотр изображений различных форматов

Post by 2useven10 »

2useven10 wrote: Tue 28 Jul, 2026 03:52 Неправильные utf-8 символы
Правильнее некорректные байты в utf-8 последовательности.
User avatar
John Doe
Бюрократ
Posts: 14635
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 94 times
Been thanked: 526 times
Contact:

PictureView 3 — просмотр изображений различных форматов

Post by John Doe »

2useven10 wrote: Tue 28 Jul, 2026 10:07 Тем не менее - Да. (0xDC80 | Char) это вторая часть суррогатной пары без первой.
И с её помощью получится валидный utf-8?
2useven10 wrote: Tue 28 Jul, 2026 10:07 В файловой системе да, последовательность байт. В ОС Linux, скорее уже предполагается UTF-8.
В Windows в этом плане ещё строже - штатные функции не дадут создать такое, если не использовать \\?\

Я немного о другом: и там и там в дикой природе могут встретиться имена допустимые с точки зрения fs, но создающие проблемы на прикладном уровне.
https://t.me/FarManager — Telegram чат
2useven10
Posts: 5514
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 22 times
Been thanked: 356 times

UTF-16, UTF-8 и прочие кодировки применительно к путям в файловых системах

Post by 2useven10 »

John Doe wrote: Tue 28 Jul, 2026 12:08 И с её помощью получится валидный utf-8?
Какой-то разговор слепого с глухим получается...
Речь изначально об обратном преобразовании. Из некорректного utf8 в неправильные суррогатные пары (только 2-я половина, для ошибок). Чтобы при обратном преобразовании (с учетом отдельной обработки неправильных) получить исходный некорректный utf8.
Last edited by 2useven10 on Tue 28 Jul, 2026 14:00, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 14635
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 94 times
Been thanked: 526 times
Contact:

UTF-16, UTF-8 и прочие кодировки применительно к путям в файловых системах

Post by John Doe »

2useven10 wrote: Tue 28 Jul, 2026 10:13 Из некорректного utf8
Полагаю со слухом и зрением у собеседников проблем нет, а вот в понятиях не сошлись пока.

Я исхожу из того, что с utf-8 может быть только валидным, и никаким системным преобразованием непарный суррогат в него не положить.

Что вовсе не исключает возможности сделать свой наколенный конвертер (или специальную библиотечку подключить), решающую обозначенную задачу не выходя за пределы 8бит.
Подозреваю, автор именно это и сделал.
Но в результате получилось wtf-8 или что-то подобное. Не utf-8.
https://t.me/FarManager — Telegram чат
SEt
Posts: 536
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 46 times

UTF-16, UTF-8 и прочие кодировки применительно к путям в файловых системах

Post by SEt »

Как правильно написал John Doe, имена файлов, по крайней мере под Windows, это вовсе не UTF-16, а можно сказать UCS-2.

Преобразование UCS-2 -> UTF-8 -> UCS-2, конечно, можно сделать без потерь, но это не будет стандартное UTF-16<->UTF-8. Специфицировать же нестандартное преобразование в интерфейсе плагинов, по-моему, совершенно лишние сложности.

WideCharToMultiByte/MultiByteToWideChar, кстати, до висты, вроде бы, работали как раз в режиме "без потерь", а потом стали работать по стандарту.
2useven10
Posts: 5514
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 22 times
Been thanked: 356 times

UTF-16, UTF-8 и прочие кодировки применительно к путям в файловых системах

Post by 2useven10 »

Да я согласен, есть нюансы. Причём у меня даже нет чёткого понимания как надо делать правильно.
И проблема (изменение поведения) с переходом на висту+ скорее как раз в обработке правильных суррогатов,
которые стали преобразовываться как UTF16 а не 2 кода UCS2.
Post Reply

Return to “Операционные системы, командные оболочки и прочее”