1

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

然后我将USB磁盘插入ubuntu(13.04),

ls /dev/disk/by-label

显示“USB\x20\xb4\xc5\xc5\xcc”。

或者,我使用 udev 规则在埃 beaglebone 上自动安装外部 USB 磁盘。

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 盘就可以了。

4

1 回答 1

0

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

此 Microsoft 页面对此进行了说明:http: //msdn.microsoft.com/en-us/library/windows/desktop/dd317748%28v=vs.85%29.aspx

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

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

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

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

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

这个维基百科页面: http ://en.wikipedia.org/wiki/Comparison_of_file_systems 使它更清晰一些

"除值 0-31、127 (DEL) 和:" * / : < > 之外的任何字节?\ | + , . ; = [](小写 az 存储为 AZ)。使用 VFAT LFN 除了 NUL 之外的任何 Unicode"

希望这可以帮助。

于 2014-02-05T06:07:11.917 回答