Linux 是否显示fat32 usb磁盘的卷标?

Linux 是否显示fat32 usb磁盘的卷标?,linux,ubuntu,character-encoding,udev,fat32,Linux,Ubuntu,Character Encoding,Udev,Fat32,在我的例子中,我将fat32 usb磁盘的卷标修改为usb磁盘“在windows系统中使用中文字符 然后我将U盘插入ubuntu13.04 ls /dev/disk/by-label 显示USB\x20\xb4\xc5\xc5\xcc 或者,我使用udev规则将外部usb磁盘自动装载到angstrom beaglebone上 IMPORT{program}="/sbin/blkid -o udev -p %N" ENV{ID_FS_LABEL}!="", ENV{mount_point}="/

在我的例子中,我将fat32 usb磁盘的卷标修改为usb磁盘“在windows系统中使用中文字符

然后我将U盘插入ubuntu13.04

ls /dev/disk/by-label
显示USB\x20\xb4\xc5\xc5\xcc

或者,我使用udev规则将外部usb磁盘自动装载到angstrom beaglebone上

IMPORT{program}="/sbin/blkid -o udev -p %N"
ENV{ID_FS_LABEL}!="", ENV{mount_point}="/media/%E{ID_FS_LABEL}"
ACTION=="add", RUN+="/bin/mkdir -p %E{mount_point}", RUN+="/bin/mount -o iocharset=utf8 /dev/%k %E{mount_point}"
我有一个/media/USB安装点

我怎样才能得到正确的卷标


测试一个ntfs和ext3 usb磁盘就可以了。

FAT、VFAT和FAT32似乎不使用unicode文件名——至少我不这么理解。它们可以使用OEM代码页中我不完全理解的大多数字符,但即使如此,仍有许多字符无法显示

此Microsoft页面对此进行了说明:

NTFS以Unicode格式存储文件名。相比之下,较旧的FAT12、FAT16和FAT32文件系统使用OEM字符集。有关更多信息,请参阅代码页

创建FAT文件的非Unicode应用程序有时必须使用标准C运行时库转换函数在Windows代码页字符集和OEM代码页字符集之间进行转换。对于文件系统函数的Unicode实现,无需执行此类转换

应用程序可以使用通用字符串类型,如Windows字符串数据类型中所述。应用程序还可以使用通用函数原型,使用函数原型约定中所述的技术。对于通用字符串类型或通用函数原型,应用程序可以使用单个源文件编译Unicode或非Unicode版本。为此,应用程序为Unicode编译时未调用的函数提供宏

在NTFS和FAT文件系统中,特殊文件名字符为:“\”、“/”、“.”、“?”和“*”。在OEM代码页上,这些特殊字符在字符0x00到0x7F的ASCII范围内。它们的Unicode等价物是两字节形式的相同值,即0x0000到0x007F

警告:日语操作系统上使用的Windows代码页和OEM代码页字符集包含日元符号¥而不是反斜杠\。因此,日元符号是NTFS和FAT文件系统禁止使用的字符。将Unicode映射到日语代码页时,WideChartMultiByte和其他转换函数映射到将反斜杠U+005C和普通Unicode日元符号U+00A5转换为同一个字符。出于安全原因,您的应用程序通常不允许Unicode字符串中的字符U+00A5转换为FAT文件名。有关更多信息,请参阅安全注意事项:国际功能

此维基百科页面: 更清楚一点

除值0-31、127 DEL和:*/:<>?\\\\+,.;=[]低阶a-z以外的任何字节都存储为a-z。对于VFAT LFN,除NUL以外的任何Unicode

希望这有帮助