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 обеспечивает поддержку различных языков и символов, позволяя пользователям работать с файлами на своем родном языке. Однако при работе с файлами в разных операционных системах и окружениях, может потребоваться конвертация кодировки для совместимости.
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 — это UTF-16, которая использует 2 байта для кодирования каждого символа. Это позволяет использовать различные языки и символы в именах файлов, включая кириллицу, латиницу и другие. Однако, нужно учитывать, что не все программы и системы поддерживают данную кодировку, что может привести к проблемам с воспроизведением или обработкой файлов.
Для обеспечения совместимости с другими операционными системами и программами рекомендуется использовать более универсальные кодировки, такие как UTF-8 или ASCII. Они используют меньшее количество байтов для кодирования символов, что делает имена файлов более читаемыми в различных программах и системах.
При выборе кодировки имен файлов также следует обратить внимание на ограничения, накладываемые операционной системой. Например, Windows ограничивает длину имени файла до 255 символов, а также запрещает использовать определенные символы в именах файлов, такие как / \ : ? » * < > | и другие. Соблюдение данных ограничений поможет избежать проблем при работе с файлами в Windows.
Важно помнить, что правильная кодировка имен файлов — это ключ к успешной работе с данными в Windows. Учитывайте особенности кодировки, выбирайте правильную кодировку в зависимости от требований и совместимости программ и систем, и следуйте ограничениям операционной системы для имен файлов. Это позволит избежать проблем и обеспечить стабильную работу вашей системы.
Содержание
- Кодировка имен файлов в Windows
- Зачем нужна кодировка имен файлов?
- Принципы работы кодировки имен файлов
- Выбор кодировки в Windows
Кодировка имен файлов в Windows
Одним из наиболее распространенных стандартов кодировки имен файлов в Windows является кодировка UTF-8. UTF-8 позволяет использовать символы различных языков, включая русский, английский, китайский и другие.
При работе с именами файлов на Windows рекомендуется следовать нескольким простым советам:
- Избегайте использования специальных символов, таких как знаки пунктуации, скобки, пробелы и т. д. Вместо них лучше использовать буквы, цифры и подчеркивание.
- Помните, что регистр символов в именах файлов имеет значение. Например, файл «Document.txt» и файл «document.txt» будут восприниматься как два разных файла.
- Используйте латинские буквы при создании имен файлов. Латинские буквы легче обрабатываются операционной системой и могут быть безопаснее при передаче файлов между разными системами.
Кодировка имен файлов может иметь непосредственное влияние на способ отображения файлов в системе, а также на работу программ, которые используют эти файлы. Поэтому рекомендуется следовать установленным стандартам и соблюдать правильные правила кодировки имен файлов в Windows.
Зачем нужна кодировка имен файлов?
Кодировка имен файлов важна по нескольким причинам:
- Совместимость с различными языками и символами. Различные языки могут использовать разные символы, которые не могут быть представлены во всех кодировках. Например, для работы с именами файлов на русском языке необходима поддержка кодировки UTF-8 или UTF-16, так как они позволяют представлять все символы русского алфавита. Если кодировка имен файлов не поддерживает нужные символы, это может привести к проблемам при работе с такими файлами.
- Безопасность. Некоторые символы и комбинации символов являются недопустимыми в именах файлов из-за потенциальных уязвимостей, которые могут быть использованы злоумышленниками для атак на систему. Кодировка имен файлов позволяет фильтровать и проверять символы, чтобы предотвратить подобные уязвимости и обезопасить систему.
- Переносимость данных. Кодировка имен файлов может быть важна при обмене файлами между разными операционными системами. Например, если файл с именем, содержащим символы, неподдерживаемые в кодировке, используемой в другой ОС, это может привести к потере данных или некорректному отображению имен файлов на приемной стороне. Поэтому важно выбирать правильную кодировку для сохранения и передачи файлов.
Знание и использование правильной кодировки имен файлов позволяет избежать проблем с отображением и работы с файлами, а также обеспечивает более безопасное и эффективное использование операционной системы.
Принципы работы кодировки имен файлов
Имена файлов в операционной системе Windows хранятся в кодировке UTF-16LE, которая представляет символы в виде последовательности двух байтов. Такая кодировка позволяет использовать символы из различных языков и поддерживает большое количество символов.
Для сохранения совместимости с предыдущими версиями операционной системы, Windows также поддерживает использование кодировки ANSI для имен файлов. Однако, при использовании кодировки ANSI возникают проблемы с поддержкой символов не из диапазона ASCII.
При работе с именами файлов в Windows необходимо учитывать, что чувствительность к регистру символов в именах файлов зависит от файловой системы. Например, файловая система NTFS, используемая в последних версиях Windows, является регистронезависимой, то есть не различает символы в имени файла по их регистру. Однако, в файловой системе FAT, используемой на некоторых съемных носителях, регистр символов в имени файла имеет значение.
При работе с именами файлов также необходимо учитывать ограничения на использование определенных символов. Например, некоторые символы, такие как /, \, :, *, ?, «, <, >, и |, не могут быть использованы в именах файлов в Windows. Также ограничения на длину имени файла зависят от файловой системы, и в некоторых случаях могут быть весьма ограничивающими.
При кодировке имен файлов в Windows также могут возникать проблемы с отображением символов, которые не поддерживаются в используемой системе. Например, при открытии файла, имя которого содержит символы из алфавитов или письменностей, не поддерживаемых системой, будет отображаться заменяющий символ или пропуски.
Для сохранения совместимости с другими операционными системами и устройствами, при передаче файлов через сеть или на внешние носители, такие как USB-флешки, рекомендуется использовать общепринятую кодировку UTF-8. Это позволяет сохранить правильное отображение имен файлов при работе с различными системами.
Выбор кодировки в Windows
Выбор правильной кодировки имен файлов очень важен для совместимости и безопасности при работе в операционной системе Windows. В Windows используется несколько различных систем кодирования, и каждая из них имеет свои особенности и ограничения.
Одной из наиболее распространенных кодировок в Windows является кодировка CP1251, которая использует 8-битный символ. Она широко используется в национальных языках, таких как русский, украинский и других языках, использующих кириллицу. Однако, использование этой кодировки может вызвать проблемы при работе с другими языками и символами, так как она не поддерживает множество символов, присутствующих в других языках.
Еще одной распространенной кодировкой в Windows является кодировка UTF-8. Эта кодировка использует переменное количество байт для представления символов, что позволяет ей поддерживать широкий диапазон символов и языков. UTF-8 является стандартной кодировкой для Интернета и многих других протоколов и форматов файлов.
При выборе кодировки следует учитывать особенности вашей работы и предпочтения. Если вы работаете только с русским языком, кодировка CP1251 может быть наиболее удобной для вас. Однако, если вы работаете с международными символами или файлами, которые могут содержать символы разных языков, рекомендуется использовать кодировку UTF-8.
Кодировка | Описание |
---|---|
CP1251 | Используется для русского и других языков, использующих кириллицу |
UTF-8 | Универсальная кодировка, поддерживающая множество языков и символов |
Важно также учитывать, что выбор кодировки должен быть согласован между всеми участниками работы с файлами. Если вы обмениваетесь файлами с другими людьми или работаете в команде, все должны использовать одну и ту же кодировку, чтобы избежать проблем с отображением и обработкой имен файлов.
В заключение, выбор кодировки в Windows зависит от ваших потребностей и требований работы. Учтите особенности вашей работы, предпочтения и согласуйте выбор кодировки с другими участниками процесса. Таким образом, вы сможете избежать проблем с именами файлов и обеспечить удобство и безопасность вашей работы.
Многие пользователи сталкивались с тем, что при попытке создать или сохранить файл они видели сообщение о том, что это «недопустимое имя файла», если там присутствуют некоторые символы или было введено неподходящее имя.
Дело в том, что в операционной системе Windows имеются запрещенные имена файлов. Не все имена файлов и папок разрешены, потому что существуют недопустимые символы в имени файла или папки.
Содержание:
- Недопустимые имена файлов Windows
- Запрещенные символы в имени файла или папки
- Как создать папку с недопустимым именем
- Как удалить папку с недопустимым именем файла — 3 способа
- Выводы статьи
Есть способы, чтобы обойти эти ограничения, но вам потребуется приложить определенные усилия, чтобы удалить такие элементы из системы.
Обычно, операционные системы Microsoft, например, Windows 7, Windows 8.1, Windows 10, Windows 11, не привередливы, когда речь идет об именах файлов и папок. Хотя там есть ограничение на максимальное количество символов в имени файла или папки, чтобы соответствовать файловой системе NTFS (New Technology File System).
Операционная система Windows принимает почти все имена для файлов и каталогов. Однако некоторые заголовки для объектов файловой системы применить невозможно при создании обычным образом.
Например, если вы попытаетесь назвать новую или существующую папку именем «CON», то появится сообщение об ошибке «Указано неверное имя устройства».
В данном случае, это имя зарезервировано для сокращенного наименования консоли — «console». Это связано с тем, что некоторые имена файлов или папок не могут быть назначены, потому что в Windows запрещенные имена файлов не разрешено использовать.
Во времена DOS, когда в Windows не было графического пользовательского интерфейса (GUI), определенные термины были зарезервированы для операционной системы и устройств. В настоящий момент времени в этом нет особой необходимости, и различные блокировки имен остаются пережитками прошлого.
В этом руководстве мы рассмотрим, какие символы запрещены в имени файла. Из инструкций этой статьи вы узнаете, что делать, если на компьютере имеются запрещенные символы в имени файла Windows и эти объекты не удаляются с ПК.
Недопустимые имена файлов Windows
В операционной системе Windows запрещены имена не только «CON», но и «NUL», «AUX» некоторые другие, которые зарезервированы для имен устройств. Верхний и нижний регистр символов в имени не имеют значения, поэтому «con» или «CON» одинаково не разрешены в качестве обозначения файла или папки.
Не используйте подобные имена с расширением имени файла, потому что в этом случае расширение не учитывается. Операционная система воспринимает файлы «CON» и «con.txt» как одно и тоже.
Список недопустимых имен в Windows:
- CON, PRN, AUX, NUL, COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9.
Не называйте папки и файлы такими именами, чтобы избежать конфликтов с различными устройствами.
Запрещенные символы в имени файла или папки
Помимо собственно имени файла, в операционной системе Windows имеются запрещенные символы в имени файла или папки. Кроме того, нельзя забывать, что пользователи могут открывать и просматривать файлы в других операционных системах (macOS, Linux, Android), поэтому лучше избегать некоторых символов в именах файлов.
В ОС Windows в имени файла запрещено использование следующих символов в файловой системе NTFS (таблица):
< | знак меньше, чем |
> | знак больше, чем |
: | двоеточие |
« | двойные кавычки |
/ | косая черта (прямой слеш) |
\ | обратная косая черта (обратный слеш) |
| | вертикальная черта |
? | вопросительный знак |
* | звездочка |
В файловой системе FAT имеются следующие запрещенные символы в имени файла (таблица):
. | точка |
« | двойные кавычки |
/ | косая черта (прямой слеш) |
\ | обратная косая черта (обратный слеш) |
[ | левая квадратная скобка |
] | правая квадратная скобка |
: | двоеточие |
; | точка с запятой |
| | вертикальная черта |
= | знак равенства |
, | запятая |
Помимо вышеперечисленных примеров лучше не использовать в именах файлов и папок следующие символы из-за ограничений Интернета или других файловых систем (таблица):
# | решетка |
% | процент |
& | амперсанд |
пробел | |
+ | плюс |
@ | символ «собака» |
Имена файлов не могут заканчиваться пробелом или точкой.
Как создать папку с недопустимым именем
Если вы хотите создать папку с названием, запрещенным в Windows, вы можете использовать обходной путь с командной строкой. Создавать подобные папки не рекомендуется из-за возможного конфликта устройств на компьютере.
Для примера, мы создадим папку с именем «CON» на локальном диске «C:».
Выполните следующие действия:
- В поле поиска Windows введите «cmd».
- Запустите командную строку от имени администратора.
- В окне интерпретатора командной строки введите предложенную команду, а потом нажмите на клавишу «Enter»:
md "\\.\C:\CON"
После выполнения команды в указанном расположении появится папка с именем «CON».
Подобная папка на компьютере довольно бесполезна, потому что эту папку невозможно открыть в Windows 8.1 и Windows 10.
Кроме того, удалить папку с компьютера не получится простым способом, с помощью щелчка правой кнопкой мыши и выполнения команды контекстного меню «Удалить».
Другая ситуация наблюдается в последних версиях Windows 11. Операционная система не позволяет создать папку с именем «CON» и другими неподдерживаемыми именами, но у вас получится удалить этот каталог, созданный в командной строке, обычным способом (кроме папки с именем «NUL»). Вы можете открыть подобную папку и вложенные в нее файлы.
Как удалить папку с недопустимым именем файла — 3 способа
На жестком диске (HDD) или на твердотельном накопителе (SSD) вашего компьютера находится неудаляемая папка. Независимо от того, создали ли вы сами папку или ее создал кто-то другой, вы захотите от нее избавиться. Простые методы решения этой проблемы не подойдут.
Используйте три предложенных метода.
1 способ.
Вызовите командную строку, как описано выше в статье и выполните команду:
rmdir \\.\C:\CON
Эта команда работает, если обрабатываемая папка была пустой. При необходимости измените команду, если местоположение и имя удаляемого каталога отличаются от этих.
Если в папке «CON» есть файлы, сначала очистите этот каталог через консоль командой:
del \\.\C:\CON /q
Затем удалите ненужную папку:
rmdir \\.\C:\CON
2 способ.
Для выполнения задачи используйте бесплатную программу Windows Tweaker, с помощью которой вы можете изменять параметры операционной системы.
Несмотря на то, что программа Windows Tweaker давно не обновлялась, но она хорошо подходит для наших целей. Мы используем переносную версию (portable) приложения, которую не нужно устанавливать на компьютер.
Пройдите шаги:
- Скачайте Windows Tweaker по ссылке из облачного хранилища.
- Запустите приложение на ПК.
- В окне «Windows Tweaker» откройте вкладку «Задачи».
- На верхней панели выберите раздел «специальные имена папок».
- Здесь вы можете создать папку с любым запрещенным именем в Windows, например, для проведения исследований.
- Нажмите на кнопку «Просмотр и удаление». Убедитесь, что эта папка должна быть пуста перед удалением.
- В окне «Выбор папки» выделите нужную папку, а затем нажмите на кнопку «Выбор папки».
- Эта папка сразу удаляется с компьютера.
3 способ.
Создание и удаление неподдерживаемых файлов и папок возможно с помощью «живого» DVD-диска или USB-накопителя с Linux. Вам нужно использовать загрузочные Live CD, Live DVD или Live USB носители с операционной системой Linux. Также для этих целей подходят антивирусные спасательные диски, потому что они созданы на основе дистрибутивов Linux.
Загрузитесь с Live USB на ПК. С помощью файлового менеджера, установленного на подобном диске, можно получить доступ к системе Windows. Linux нужен только драйвер для доступа на запись к файловой системе Windows. Удалите или переименуйте файл или папку с недопустимым именем.
Выводы статьи
У некоторых пользователей возникают вопросы, какие символы запрещено использовать в имени файла или папки. В операционной системе Windows имеются запрещенные знаки в имени файла или папки, а отдельные имена нельзя использовать на компьютере.
Имеется способ, позволяющий создать папку или файл с неподдерживаемым именем, но его будет не просто удалить с ПК. Удаление подобного файла или папки с компьютера выполняется с помощью нескольких методов.
Похожие публикации:
- 10 способов запустить локальную политику безопасности Windows
- Как включить темный режим Windows 11
- Как убрать экран блокировки Windows 11 — 5 способов
- Как отключить автоматическое обновление драйверов Windows
- Отключение изоляции ядра Windows 11 — 5 способов