现在您可以在文件名中使用任何 Unicode 字符。无需修改内核或文件实用程序。这是因为内核中的文件名可以是任何不包含空字节的内容,而“/”用于分隔子目录。当使用 UTF-8 编码时,非 ASCII 字符永远不会使用空字节或斜杠进行编码。所有发生的事情是文件和目录名占用的字节数比它们包含的字符数更多。例如,一个由五个希腊字符组成的文件名在内核中将显示为 10 字节的文件名。内核不知道(也不需要知道)这些字节显示为希腊字符。
这是通用理论,只要您的文件驻留在 Linux 上。对于从其他操作系统使用的文件系统,您可以使用挂载选项来控制文件名与 UTF-8 之间的转换
“vfat”文件系统有一个挂载选项“utf8”。请参阅文件/usr/src/linux/Documentation/filesystems/vfat.txt。当您提供与默认值(“iso8859-1”)不同的“iocharset”挂载选项时,使用和不使用“utf8”的结果不一致。因此,我不建议使用“iocharset”挂载选项。
“msdos”、“umsdos”文件系统具有相同的挂载选项,但似乎不起作用。
“iso9660”文件系统有一个挂载选项“utf8”。请参阅文件/usr/src/linux/Documentation/filesystems/isofs.txt.
自 Linux 2.2.x 内核以来,“ntfs”文件系统有一个挂载选项“utf8”。请参阅文件 /usr/src/linux/Documentation/filesystems/ntfs.txt。
其他文件系统(nfs、smbfs、ncpfs、hpfs 等)不转换文件名;因此,仅当其他操作系统支持 Unicode 文件名时,它们才支持 UTF-8 编码的 Unicode 文件名。请注意,要为所有将来的重新挂载启用挂载选项,您需要将其添加到相应的第四列/etc/fstab行。
您应该设置以下包含区域名称的环境变量
覆盖 LC_MESSAGES
覆盖所有其他 LC_* 变量
各个变量用于:字符类型和编码、自然语言消息、排序规则、数字格式、货币金额格式、日期和时间显示。
所有 LC_* 变量的默认值。(有关详细说明,请参阅“man 7 locale”。)
为了告诉您的系统和所有应用程序您正在使用 UTF-8,您需要将 UTF-8 的代码集后缀添加到您的区域名称中。例如,如果您想在 UTF-8 印地语区域设置中运行应用程序,那么使用 bash shell,您可以指定要传递给应用程序的环境变量。
$ LANG=hi_IN.UTF-8 xman |
export LANG=hi_IN.UTF-8 |