Windows 与 Mac OS X 中的 Unicode 文件名

Pau*_*ulJ 4 windows windows-7 unicode filenames osx-mavericks

我试图使用几个 Windows 文件同步程序(Microsoft SyncToy、FreeFileSync)在两个文件夹之间进行同步:本地 Windows 文件夹和使用 WebDAV 安装在 Windows 计算机上的 OS X 文件夹。然而,同步效果不太好:每当文件名使用不寻常的字符(重音、中文字母......)时,程序不会将其检测为同一个文件,并尝试通过两种方式复制它:首先从Windows 盒子先连接到 OS X,然后再连接到 OS X。基本上,它将文件的两个副本视为完全不同的。

这让我开始思考:OS X 和 Windows 中用于文件名的 Unicode 到底有哪些变体?(我想他们现在都支持 Unicode)。人们可以采取什么措施来防止这种类型的不兼容性?

两台机器均使用Windows 7 SP 1和OS X 10.9.5。

hip*_*ail 6

Windows 使用 UTF-16。大多数代码点都以两个字节编码。BMP(基本多语言平面)之外的代码点以占用四个字节的“代理对”进行编码。Windows 不使用任何 Unicode 规范化形式规范文件名。

\n\n

这意味着您可以有两个看起来相同的文件名,一个使用由单个代码点组成的预组合“\xc3\xa9”,另一个使用常规 ASCII“e”,后跟结合锐音重音的 Unicode,因此是两个代码点。

\n\n

OS X 使用 UTF-8。代码点使用 1 到 5 个字节进行编码。OS X 使用 Unicode NFD(标准化形式规范分解)。

\n\n

这意味着,当文件名中使用诸如“\xc3\xa9”之类的 Unicode 字符时,系统将始终将其规范化为常规 ASCII“e”,后跟结合锐音调的 Unicode,并且始终采用两个代码点。

\n\n

事实上,OS X 使用 Unicode 版本 2.1 或 3.2 中的 Unicode NFD 规范,具体取决于 OS X 的版本。

\n\n

这是一个很好的页面,涵盖了OS X/HFS+ 文件名编码的微妙之处。

\n