Windows / Mac文件io字节与字节POSIX兼容?

时间:2012-08-01 01:36:49

标签: windows macos filesystems posix endianness

我想使用POSIX编写跨平台文件IO实用程序。我想知道我在Windows上写的文件是否可以移动到OS X(通过电子邮件或拇指驱动器)并且看起来仍然包含完全相同的内容?如果我将文件从OS X移动到Windows怎么样?

此外,在将这些文件写入此文件时,我应该注意哪个平台上有任何奇怪的UTF-8异常?

这个问题仅适用于较新的Mac,而不适用于PowerPC Mac。我只是想确保所有字节顺序和相关的字节排序问题都在PowerPC中消失。

1 个答案:

答案 0 :(得分:1)

如果您的POSIX代码在打开文件进行写入时使用'binary'标志,并且两台机器具有相同的字节顺序(现代基于Intel的Mac和基于Intel的Windows PC都是如此),那么,文件应该是逐字节相同。

对于UTF-8,要注意的主要事项是,Windows通常喜欢预先组成的字符(“归一化形式NFC”),而Mac OS更喜欢去组合字符(“归一化形式NFD”)。也就是说,Windows将“é”编码为U + 00E9 LATIN SMALL LETTER E WITH ACUTE,而Mac OS将其编码为U + 0065 LATIN SMALL LETTER E,然后是U + 0301 COMBINING ACUTE ACCENT。显然,两个操作系统都会以相同的方式呈现两个序列,但我相信这会影响用户输入的字符,或者从磁盘上的文件名中读取。

对于与PowerPC一起死亡的与字节序相关的问题,这并非严格意义上说。 ARM至少可以以任何字节顺序运行,而iOS表示倾向于使用little-endian(匹配Intel),其他操作系统可能以big-endian模式运行,而某些(如Linux)可以以任何方式编译。维基百科没有提到Android设备通常使用的字节序。