Імена файлів UTF 8?


15

У операційних системах на базі Unix допустимі файли utf6? Якщо це так, мені потрібно зробити щось особливе, щоб записати файл на диск.

Дозвольте мені пояснити, що я сподіваюся зробити. Я пишу заявку, яка передасть файл через ftp у віддалену систему, але ім'я файлу динамічно встановлюється через деякий набір метаданих, який потенційно може бути у utf8. Мені цікаво, чи є щось, що мені потрібно зробити, щоб записати файл на диск в unix / linux.

Крім того, чи знає хтось, що буде, якщо я завантажую ім'я файлу utf 8 в систему, яка не підтримує utf8?

Відповіді:


20

У Unix / Linux ім'я файлу - це послідовність будь-яких байтів, крім косої риски або NUL. Штрих розділяє компоненти контуру, а NUL припиняє ім'я шляху.

Отже, ви можете використовувати будь-яке кодування, яке ви хочете для імен файлів. У деяких додатках можуть виникнути проблеми з кодуваннями, якщо вони наївні щодо того, які символи можуть бути у назви файлів - наприклад, погано написані сценарії оболонки часто не обробляють імена файлів з пробілами.

Сучасні середовища Unix / Linux відмінно обробляють імена файлів, кодованих UTF-8.


12

Внутрішня частина більшості файлових систем зберігає байти: драйвер файлової системи не переймається тим, що означають байти. Узагальнений драйвер файлової системи в Linux та більшості інших сучасних уніцій дозволяє будь-якому байту, окрім /та нульовому байту, відображатися у імені файлу.

Існують файлові системи, які можуть мати обмеження в кодуванні - зазвичай це нефайлові файлові системи, такі як FAT або NTFS. Деякі мережеві файлові системи, такі як Samba, можуть переводити між кодуванням сервера і кодуванням клієнта; вам потрібно переконатися, що конфігурації сервера та клієнта є узгодженими.

Зазвичай у більшості систем байти, що складають ім'я файлу, інтерпретуються як UTF-8. Якщо ви запускаєте програму, яка інтерпретує імена файлів як символи, наприклад, додаток, який передає імена через FTP, можливо, вам знадобиться налаштувати цю програму, щоб сказати, що імена ваших файлів закодовані в UTF-8. Налаштування середовища LC_CTYPEна локальну локацію UTF-8, як en_US.UTF-8і хитрості, застосовується для багатьох програм командного рядка.

Якщо ви зберігаєте файли в системі, яка не підтримує UTF-8, це не має значення. Байти залишаться однаковими. Ви не зможете відобразити символи, що складають імена файлів, але якщо ви скопіюєте файли назад у систему, яка підтримує UTF-8, ці самі байти все одно відображатимуться як символи UTF-8.

Якщо ви пишете власну заявку, використовуйте UTF-8 всередині та, коли це можливо, для зберігання та передачі - це гарна ідея.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.