В какой кодировке имена файлов windows

I’m just getting started on some programming to handle filenames with non-english names on a WinXP system. I’ve done some recommended reading on unicode and I think I get the basic idea, but some parts are still not very clear to me.

Specifically, what encoding (UTF-8, UTF-16LE/BE) are the file names (not the content, but the actual name of the file) stored in NTFS? Is it possible to open any file using fopen(), which takes a char*, or do I have no choice but to use wfopen(), which uses a wchar_t*, and presumably takes a UTF-16 string?

I tried manually feeding in a UTF-8 encoded string to fopen(), eg.

unsigned char filename[] = {0xEA, 0xB0, 0x80, 0x2E, 0x74, 0x78, 0x74, 0x0}; // 가.txt

FILE* f = fopen((char*)filename, "wb+");

but this came out as ‘ê°€.txt’.

I was under the impression (which may be wrong) that a UTF8-encoded string would suffice in opening any filename under Windows, because I seem to vaguely remember some Windows application passing around (char*), not (wchar_t*), and having no problems.

Can anyone shed some light on this?

I’m just getting started on some programming to handle filenames with non-english names on a WinXP system. I’ve done some recommended reading on unicode and I think I get the basic idea, but some parts are still not very clear to me.

Specifically, what encoding (UTF-8, UTF-16LE/BE) are the file names (not the content, but the actual name of the file) stored in NTFS? Is it possible to open any file using fopen(), which takes a char*, or do I have no choice but to use wfopen(), which uses a wchar_t*, and presumably takes a UTF-16 string?

I tried manually feeding in a UTF-8 encoded string to fopen(), eg.

unsigned char filename[] = {0xEA, 0xB0, 0x80, 0x2E, 0x74, 0x78, 0x74, 0x0}; // 가.txt

FILE* f = fopen((char*)filename, "wb+");

but this came out as ‘ê°€.txt’.

I was under the impression (which may be wrong) that a UTF8-encoded string would suffice in opening any filename under Windows, because I seem to vaguely remember some Windows application passing around (char*), not (wchar_t*), and having no problems.

Can anyone shed some light on this?

Операционная система Windows имеет свой собственный набор правил и соглашений для именования файлов. Одним из ключевых аспектов именования файлов является выбор кодировки. Кодировка имен файлов в Windows зависит от настроек локализации операционной системы.

В Windows используется широко распространенная кодировка UTF-16 LE (Little Endian) для имен файлов. UTF-16 LE позволяет использовать не только символы из латинского алфавита, но и различные символы из других языков, включая кириллицу, китайские и японские иероглифы и многое другое.

Эта кодировка выбрана для обеспечения совместимости с различными языками и символами, используемыми пользователями в операционной системе Windows. Она позволяет сохранять файлы с разными языковыми символами и обеспечивает удобство использования для международных пользователей.

Следует отметить, что кодировка UTF-16 LE используется только для имен файлов в операционной системе Windows, в то время как содержимое файлов может иметь другую кодировку, в зависимости от программы, используемой для создания и редактирования этих файлов. В любом случае, использование UTF-16 LE для имен файлов обеспечивает высокую гибкость и совместимость в работе с файлами в операционной системе Windows.

История кодировки имен файлов в Windows

С момента своего появления в 1985 году, операционная система Windows использовала различные кодировки имен файлов. Изначально, в первых версиях Windows, была поддержана кодировка CP/M, которая была предшественником операционной системы MS-DOS.

Впоследствии, с выходом Windows 95, Microsoft начал использовать кодировку Windows-1251, также известную как «кодировка Windows». Эта кодировка позволяла использовать символы национальных алфавитов, включая латиницу и кириллицу. Однако, кодировка Windows-1251 имела свои ограничения, так как она не поддерживала символы, отличные от символов набора ISO 8859-1.

С появлением Windows NT, Microsoft перешел на более мощную и универсальную кодировку, названную Unicode. Unicode позволяет использовать практически все символы со всего мира, что сделало имена файлов в Windows многоязычными.

Современные версии Windows, такие как Windows 10, по умолчанию используют кодировку UTF-16 LE для имен файлов. UTF-16 LE, наряду с другими форматами кодировки Unicode, позволяет использовать символы из различных языков и позволяет работать с файлами, независимо от языка и национальных особенностей.

Имя файла в Windows может содержать различные символы, такие как буквы, цифры, специальные символы и даже символы, отличные от базового алфавита. Это дает возможность пользователям создавать имена файлов, содержащие символы из различных языков и письменностей.

Важно отметить, что кодировка имен файлов может иметь значение при работе с программами или системами, которые не поддерживают Unicode или другие форматы кодировки.

В заключение, развитие кодировки имен файлов в Windows является важной частью поддержки многоязычности, и позволяет пользователям создавать и работать с файлами, содержащими символы из различных языков и письменностей.

Кодировка имен файлов в Windows 9x

В операционной системе Windows 9x, такой как Windows 95 и Windows 98, используется кодировка имен файлов, которая называется кодировкой OEM. Эта кодировка основана на таблице символов, известной как кодовая страница, которая определяет соответствие между числовыми значениями и символами.

Кодировка имен файлов в Windows 9x тесно связана с национальными языками и настройками локализации. Она позволяет использовать различные наборы символов, включая латинские буквы, кириллицу, китайские и японские иероглифы и др. Это позволяет пользователям операционной системы использовать имена файлов на своем родном языке.

Однако следует отметить, что кодировка имен файлов в Windows 9x имеет некоторые ограничения. Она не поддерживает все символы Unicode, а также может вызывать проблемы при обмене файлами между различными операционными системами с различными кодировками.

В целом, кодировка имен файлов в Windows 9x обеспечивает поддержку различных языков и символов, позволяя пользователям работать с файлами на своем родном языке. Однако при работе с файлами в разных операционных системах и окружениях, может потребоваться конвертация кодировки для совместимости.

Вобщем, проблему я пока что так и не решил… Может кто подскажет что я сделал не так?

Напомню — вопрос в том, что нужно определить кодировку в именах файлах и папок в маздае (Windows) интересует исключительно UTF-8 а не всякие cp-1251, cp-1252 (+расширенная), koi8-r и прочая маздаевская фигня т.к. написав имена файлов и папок в винде русскими символами в других системах будут каракули а UTF-8 считается как мировой эталон и определится нормально в любой среде (если у неё есть русская лаколизация)…

Я сделал следующее: Установил Ubuntu 14.04 на USB-HDD, загрузился с неё, просмотрел список установленных локалей командой: locale -a

удалил лишние локали кроме интересующих меня английской.utf8 и русской.utf8 командой: sudo locale-gen —purge en_US.utf8 ru_RU.utf8 && echo «Success!»

сново проверил удалилось ли ненужное: locale -a

он мне выдал: С.UTF8
en_US.UTF8
POSIX
ru_RU.UTF8
т.е. всё казалось бы нормально…. (и тут Остапа понесло)… Подключаю HDD с маздаем (или монтирую ntfs, неважно), открываю… а там — ВСЁ НОРМАЛЬНО!!! — КАК??? Я удалил все русские локали кроме UTF8 RUS.

Винда имена файлов пишет в 1251 или кои8? Убунту не должна была прочитать правильно эти русские виндовские шрифты т.к. я 1251 и кои8 локали УДАЛИЛ!!! а убунта их видет правильно (мне нужны были кракозябры!) а так получается что Windosw XP SP3 имена файлов и папок пишет мне в UTF8 ???? Иначе как объяснить это явление?

Решил попробовать другой момент, в Тотал Коммандоре у меня стоит плагин (Транслятор) в котором я русские имена файлов и папок переделываю в UTF8 и он мне их тут-же переименовывает в каракули, но когда я гружу Ubuntu то она эти каракули так-же видет как и винда — не распознаёт, КАК??? на убунте же Ru-UTF8 локаль стоит!!! Что за бред? Выходит что мне Тоталовский транслятор переименовывает не в UTF8 (саму кодировку) а в бредятину как оно бы отображалось если бы у меня винда не понимала бы UTF8 ???

Вобщем вопрос: так и не понят, почему Убунту, имеющая только русский утф8 отлично распознаёт виндовский русский (или винда мне их уже в утф8 катает или в убунте что-то не удалено)

Для доказательства того, что локаль правильно отображается внутри файла я в тегах .ogg и .mp3 написал коменты на русском (в винде), убунта распознала русский тег в .ogg нормально т.к. по «паспорту» в .ogg теги заносятся с кодировкой UTF8 а вот .mp3 показала мне убунта каракули (как и должно быть, т.к. мп3-теги в утф16 кодировки а я её в убунте удалил) Но вот почему сами имена файлов и папок русские написаные в маздае продолжают распознаваться в Убунте — я не могу понять. Если есть у кого идеи — отпишитесь…

Я только начинаю программировать для обработки имен файлов с неанглийскими именами в системе WinXP. Я прочитал несколько рекомендуемых материалов по юникоду, и я думаю, что понял основную идею, но некоторые части все еще не очень понятны для меня.

В частности, в какой кодировке (UTF-8, UTF-16LE / BE) находятся имена файлов (не содержание, а фактическое имя файла), хранящиеся в NTFS? Можно ли открыть любой файл с помощью fopen (), который принимает char *, или у меня нет другого выбора, кроме как использовать wfopen (), который использует wchar_t * и предположительно принимает строку UTF-16?

Я попытался вручную ввести строку в кодировке UTF-8 в fopen (), например.

unsigned char filename[] = {0xEA, 0xB0, 0x80, 0x2E, 0x74, 0x78, 0x74, 0x0}; // 가.txt

FILE* f = fopen((char*)filename, "wb+");

но получилось «ê ° € .txt».

У меня сложилось впечатление (что может быть ошибочным), что строки в кодировке UTF8 будет достаточно для открытия любого имени файла под Windows, потому что я, кажется, смутно помню, как какое-то приложение Windows передавало (char *), а не (wchar_t *), и имело Нет проблем.

Может кто-нибудь пролить некоторый свет на это?

  • В диспетчере задач процессор загружен на 100 windows 10
  • В какой версии операционной системы windows отсутствует меню пуск
  • В диспетчере задач память загружена на 100 windows 10
  • В какие игры можно поиграть на windows 7
  • В имени файла под windows нельзя использовать