|
|

楼主 |
发表于 2007-4-14 21:55:23
|
显示全部楼层
Post by realtang
楼主真是害人不浅啊。以下是内核documentaiont/vfat.txt对fat文件系统的说明。
codepage=### -- Sets the codepage number for converting to shortname
characters on FAT filesystem.
By default, FAT_DEFAULT_CODEPAGE setting is used.
iocharset=name -- Character set to use for converting between the
encoding is used for user visible filename and 16 bit
Unicode characters. Long filenames are stored on disk
in Unicode format, but Unix for the most part doesn't
know how to deal with Unicode.
By default, FAT_DEFAULT_IOCHARSET setting is used.
There is also an option of doing UTF-8 translations
with the utf8 option.
NOTE: "iocharset=utf8" is not recommended. If unsure,
you should consider the following option instead.
utf8=<bool> -- UTF-8 is the filesystem safe version of Unicode that
is used by the console. It can be be enabled for the
filesystem with this option. If 'uni_xlate' gets set,
UTF-8 gets disabled.
首先大家要弄清楚,fat文件系统本身是不支持长文件名的,只支持8.3形式的,怎么实现长文件支持的呢,是占用了其他的Directroy Entry来实现的。应用程序一般只通过长文件名来存取文件,操作系统如何支持,使得短文件名对用户是透明的呢?这个就是内核nls配合codepage使用之后才做到的。
另外一点,短文件采用的是本地语言的编码,但是长文件都是采用ucs2的编码。无论是在fat还是在ntfs都是如此。
另外一点大家要明白,linux内核是不认识ucs2也不认识multibyte,对他来说任何字符都是8bit编码。
所以怎样让内核支持unicode的文件名呢?仍然是了nls模块,通过iocharset,就可以转换ucs2编码。
所以结果呢,codepage对于ntfs根本没用,因为ntfs已经没有了短文件名这个蹩脚的东西。
之所以大部分的人愿意采用iocharset=utf8来安装fat或者nls=utf8来安装ntfs,原因是因为没有任何一种charset所表示的字符数量能够超过utf8,因为utf8的charset可以表示所有ucs编码的字符。
居然给我套了个这么大的帽子,我想有必要辩护一下……
实际上这个文档我也参考过的,我在最初的那篇文章里面是这么说的:
codepage是m$搞出来的东西。早期的操作系统都是直接使用本地语言字符集(native
language character set,NLS),屏幕显示如此,内部表示也如此。dos就是一个典型的
例子。m$把这种本地字符集称作codepage。
……
在dos时代,
fat文件系统里面存储的文件名也使用codepage。
……
windows9x似乎主要还是采用代码页机制,但是对unicode也有了部分支持。其新增的长
文件名支持使用unicode存放文件名。在linux中叫做vfat。也就是说,短文件名用
codepage,长文件名用unicode。
和文档里面的内容应该没有冲突。
至于我建议采用utf8也是有道理的。实际上,除了纯dos(Dos6.22以前)和windows的早期版本(win95,可能不包括98,记不清了)会显示默认显示短文件名以外,现在的系统都不显示短文件名了。winxp的dir有/x参数可以用来显示短文件名,但是并不是所有的文件都有短名。也就是说,短文件名这个特性基本上已经被废弃了。采用uft8来挂在vfat文件系统在日常使用中不会导致问题,除非你有特别的需要,必须和老系统打交道。
最后,我建议的是采用-o utf8,而不是iocharset=utf8 |
|