Мне нужно определить нормализацию Unicode, используемую для определенных имен файлов на диске в Windows 10.
В частности, мне нужно увидеть, использует ли имя файла форму NFC или NFD для латинских символов, отличных от ASCII, таких как «ü».
В Linux я могу сделать это:
ls | xxd
Это покажет список каталогов в виде шестнадцатеричных байтов.
Как добиться чего-то подобного в Windows? Он не обязательно должен быть шестнадцатеричным — можно использовать любую другую экранированную форму, например, в строковом формате C (например, uCC88).
Это не обязательно должна быть встроенная команда. Если вы можете указать мне на другие программы, это тоже будет полезно.
1 ответ
Я думаю, вы делаете предположение, потому что Linux использует UTF-8, а Windows — нет.
NTFS хранит имена файлов в кодировке UTF-16 без поддержки декомпозиции или нормализации. Каждый символ состоит ровно из 16 бит.
Windows не нормализует имена файлов с помощью какой-либо формы нормализации Unicode.

Что ж, тогда то же самое применимо к Windows, как и к Linux, и я не делаю неправильных предположений. Разница между UTF-8 и UTF-16 заключается в другом способе упаковки кодов. Но оба все еще знают о NFC и NFD, т.е. даже в UTF-16 вы можете иметь оба представления для «ü», например. Так что мой вопрос актуален даже для Windows. Я отклоню ваш вопрос, потому что он дает неправильный ответ (т.е. предполагает, что я делаю неправильные предположения) и не отвечает на мой вопрос о показе кодов — пожалуйста, не обижайтесь на это.
— Супер Храм
26 минут назад
Кроме того, никогда не делайте предположения, что каждый символ вписывается в одну кодовую точку UTF-16. Существуют составные символы (кластеры графем), которые используют два кода UTF-16, но при визуализации отображаются как один элемент. Итак, если вы напишете редактор и ошибетесь, люди, пытающиеся отредактировать смайлик, столкнутся с проблемами.
— Супер Храм
22 минуты назад